Methods for high bandwidth utilization by a distributed storage system

ABSTRACT

Methods for high bandwidth utilization by a distributed storage system. One method comprising accessing a plurality of storage-and-computing elements distributively storing a plurality of content fragments belonging to ‘N’ contents, wherein at least most of the ‘N’ contents are associated with different retrieving functions and the retrieving functions have low correlations; retrieving the content fragments by assembling storage-and-computing elements, wherein at least most of the assembling storage-and-computing elements assemble different contents; and adding assembling storage-and-computing elements up to a point where the aggregated consumption rate of the contents consumed by the assembling storage-and-computing elements approaches the aggregated uplink throughput of all participating storage-and-computing elements.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. application Ser. No.12/305,957, filed Dec. 20, 2008, which is the National Stage ofInternational Application No. PCT/IB2007/52392, filed Jun. 20, 2007,which claims the benefit under 35 U.S.C. 119(e) of U.S. ProvisionalPatent Application No. 60/814,888, filed Jun. 20, 2006, and U.S.Provisional Patent Application No. 60/872,767, filed Dec. 5, 2006, theentire contents of which are herein incorporated by reference.

BACKGROUND

Prior art peer-to-peer file sharing software/networks, also known asP2P, enable a community of peer client users, such as PCs or Set TopBoxes (STB), to share video or audio files via the Internet. These priorart file sharing systems are incapable of delivering Video On Demand(VoD) since they cannot support quick streaming of the content.

Other prior art related systems are known as peer-assisted broadcastingtrees, in which every participating peer is broadcasting the stream toother peers; this results in a broadcasting streaming system that, amongother things, is incapable of supporting VoD that requires a uniquestream per viewer.

P2P distributed file sharing, where pieces of a file are widelydistributed across a number of peers, is known in the art. Whenever aclient requests a download of such a file, the request is serviced froma plurality of peers rather than directly from the server. For example,one such scheme, referred to as “Swarmcast,” spreads the load placed ona web site offering popular downloadable content by breaking files intomuch smaller pieces. Once a user has installed the Swarmcast clientprogram, his computer automatically cooperate with other users'computers by passing around pieces of data that the users have alreadydownloaded, thereby reducing the overall serving load on the centralserver. A similar scheme, referred to as “BitTorrent,” works alongsimilar principles. In particular, when under low load, a web site whichserves large files using the BitTorrent scheme will behave much like atypical http server since it performs most of the serving itself.However, when the server load reaches some relatively high level,BitTorrent will shift to a state where most of the upload burden isborne by the downloading clients themselves, which service otherdownloading clients.

Additional background information about Video On Demand and about VideoOn Demand Patent Platform may be found at www.patentVC.com.

BRIEF DESCRIPTION OF THE DRAWINGS

The embodiments of the present invention are herein described, by way ofexample only, with reference to the accompanying drawings. With specificreference now to the drawings, it is stressed that the particulars shownare by way of example and for purposes of illustrative discussion of theembodiments of the present invention only, and are presented in order toprovide what is believed to be the most useful and readily understooddescription of the principles and conceptual aspects of the embodimentsof the present invention. In this regard, no attempt is made to showstructural details of the embodiments in more detail than is necessaryfor a fundamental understanding of the invention. In the drawings:

FIGS. 1-2 illustrate embodiments in accordance with the presentinvention;

FIGS. 3-6 illustrate content fragment retrieving diagrams in accordancewith some embodiments of the present invention;

FIGS. 7-8 illustrate network maps in accordance with some embodiments ofthe present invention;

FIGS. 9-12 illustrate groups of storage-and-computing elements inaccordance with some embodiments of the present invention;

FIGS. 13-14 illustrate a locality mechanism in accordance with someembodiments of the present invention;

FIGS. 15-18 illustrate embodiments of peer clients spanned by onenetwork node, in accordance with some embodiments of the presentinvention;

FIGS. 19A-19B illustrate popularity clusters in accordance with someembodiments of the present invention;

FIG. 20 illustrates a supplementary streaming server in accordance withsome embodiments of the present invention;

FIG. 21 illustrates another embodiment in accordance with the presentinvention; and

FIGS. 22-33 illustrate methods in accordance with the present invention.

DETAILED DESCRIPTION

In the following description, numerous specific details are set forth.However, it is understood that the embodiments of the invention may bepracticed without these specific details. In other instances, well-knownhardware, software, materials, structures and techniques have not beenshown in detail in order not to obscure the understanding of thisdescription. In this description, references to “one embodiment” or “anembodiment” mean that the feature being referred to is included in atleast one embodiment of the invention. Moreover, separate references to“one embodiment” in this description do not necessarily refer to thesame embodiment; however, neither are such embodiments mutuallyexclusive, unless so stated and except as will be readily apparent tothose of ordinary skill in the art. Thus, the invention can include anyvariety of combinations and/or integrations of the embodiments describedherein. Moreover, in this description, the phrase “exemplary embodiment”means that the embodiment being referred to serves as an example orillustration. Also herein, flow diagrams illustrate non-limitingembodiment examples of the methods; block diagrams illustratenon-limiting embodiment examples of the devices. Some of the operationsof the flow diagrams are described with reference to the embodimentsillustrated by the block diagrams. However, it is to be understood thatthe methods of the flow diagrams could be performed by embodiments ofthe invention other than those discussed with reference to the blockdiagrams, and embodiments discussed with references to the blockdiagrams could perform operations different than those discussed withreference to the flow diagrams. Moreover, it is to be understood thatalthough the flow diagrams may depict serial operations, certainembodiments could perform certain of those operations in parallel and/orin different orders.

The terms “storage-and-computing element” and “peer client” denote anelement comprising computational capability, storage capability andconnectivity to a communication network, including, but not limited to,computers, personal computers, set top boxes, gaming consoles, embeddedsystems, and cell phones.

The terms “storage-and-computing element type” and “storage elementtype” and “peer client type” and “node type” denote an association to acertain partition of content fragments. A storage-and-computing elementassociated with type ‘x’ should store the content fragments indicated bya partition of content fragments that is associated withstorage-and-computing element type ‘x’. A storage-and-computing elementassigned to more than one type, should store the content-fragmentsindicated by all of the types associated with it. Allstorage-and-computing elements associated with the same type shouldcomprise approximately the same content fragments.

The term “hash function” refers to any mechanism and/or algorithm and/ordata structure that associates data fragments to a peer client type. Forexample, the hash function may be an analytic function, hash table,polynomial series, Galois field, etc.

The term “content-striped hashed record” refers to the data stored in apeer client. The content-striped hashed record is made of “hashedrecords”

FIG. 1 illustrates one embodiment of the present invention, including:peer client devices (100 a, 101 a, 102 a, 103 a and 104 a), a network 1,and a control server 50. The peer client devices may be anystorage-enabled computing devices, such as, but not limited to, PC basedclients (100 a, 102 a, 103 a and 104 a), STB (Set Top Box) based clients101 a, or any combination thereof. The peer client devices 100 a, 101 a,102 a, 103 a, 104 a are part of a cluster of peers that areinter-connected via the network 1. The peer client devices connect tothe network 1 using data modems 40, such as, but not limited to, xDSL,DOCSIS, PON, ETHERNET, a dial-up modem, a modem supporting two way datacommunication, or two modems each supporting one way data communication.The network 1 may be the Internet, an ISP network, an Operator Network,a corporate data network, or any other form of network capable ofinter-connecting a plurality of peer clients.

The at least one control server 50 manages the following steps in itscluster:

Creating content-striped hashed records.

Distributing the content-striped hashed records among the peer clientsof the cluster that is managed by the control server 50.

Registering peer clients and allocating each peer client to a type.

In one embodiment, 1. Each peer client holds all the informationoriginally stored by the control server 50. 2. A first peer client holdsa pointer to other peer clients which store the data that was stored inthe control server 50. 3. The data that was originally stored in thecontrol server 50 is distributed between the peer clients and the peerclients can locate the required hash function when needed.

In one embodiment, the control server 50 assigns a peer client type toeach peer client, for example by implementing the following steps:

The control server 50 sets ‘n’ peer client types.

The control server 50 assigns each peer client under its control to atleast one of the peer client types.

FIG. 2 illustrates a peer-assisted system with 5 peer client types(‘n’=5). The peer clients 100 a, 100 b up to 100 z are assigned to peerclient type #1, the peer clients 101 a, 101 b up to 101 z are assignedto peer client type #2, the peer clients 102 a, 102 b up to 102 z areassigned to peer client type #3, the peer clients 103 a, 103 b up to 103z are assigned to peer client type #4, and the peer clients 104 a, 104 bup to 104 z are assigned to peer client type #5. Although FIG. 2illustrates 5 peer client types, the concept is not limited to five peerclient types, and may include a smaller or greater number of peer clienttypes, that may reach hundreds, and thousands of peer client types in apeer-assisted system.

Optionally, the control server 50 may attempt to assign an equal or anunequal number of peer clients per peer client type. Optionally, thecontrol server 50 may attempt to uniformly distribute the peer clientsassigned to the same peer client type according to a selected criterion.Optionally, the control server 50 may attempt to distribute the peerclients assigned to the same peer client type according the measuredand/or estimated performances of each client, such as bandwidth andavailability.

FIG. 3 illustrates an example of one embodiment wherein two originalcontent files (520 and 530) are to be processed by the peer-assistedsystem. The original content file 520 is striped by the control serverinto ‘m’ sequential fragments 300, 301, 302, 303, 304, 305 up to 398,referred to as content fragments. In this example, m=99. The originalcontent file 530 is striped into ‘l’=88 sequential content fragments400, 401, 402, 403, 404, 405 up to 487.

The ‘m’ and ‘l’ content fragments of the original content files 520 and530 may now be reorganized into ‘x’ hashed records, such that the hashedrecords 581, 582, 583, 584, and 585 collaboratively store the entireoriginal content of file 520, and the hashed records 591, 592, 593, 594,and 595 collaboratively store the entire original content of file 530.In this example, x=5. The content-stripped hashed records are made ofthe hashed records.

Optionally, ‘x’ equals ‘n’ and each hashed record is assigned to itscorresponding peer client type. Alternatively, ‘x’ is different from ‘n’and the hashed records are distributed between the various peer clienttypes according to a predicted method.

Different hashed records may contain different amounts of contentfragments. Different content-stripped hashed records may containdifferent amounts of hashed records.

In one embodiment, each title (also refers to a content file or contentfiles) has a unique title identification (ID). The unique titleidentification may be, but is not limited to, the content file name.Each content fragment has a header, comprising (i) the title IDassociated with the content fragment, and (ii) the position of thecontent fragment within the title, such as a serial number of thefragment within the title, referred to as fragment number. For example,each peer may be able to access a table of title IDs and fragmentnumbers; the table may be stored in a dedicated server/peer or otheraccessible storage. When the peer receives an inquiry containing a titleID and a fragment number within the title ID, it may be able to locateand transmit the required matching content fragment.

Optionally, the reorganization of the original content files into hashedrecords may be done in a pseudo-random manner, such that (for example)the hashed record 581 contains a sequence of data fragments 300, 308,312 up to 396 that represent a portion of the original content file 520;in this example, this portion comprises about 20 fragments out of the 99fragments present in the original content file 520, which corresponds toabout 1/n=1/5 of the original fragments that were rearranged in n=5different peer client types according to the illustrated example. Thehashed record 581 sequence of 300, 308, 312 up to 396 fragments and theother hashed records sequences are a direct result of the selection ofan actual pseudo-random sequence that is used in rearranging theoriginal content file into n peer client types of content-striped hashedrecords.

Without limiting the scope of the invention, the pseudo-random hashfunction may be calculated according to a pseudo-random primitivepolynomial that is modulo over n (as an example), or may be calculatedusing a hash function operated on the Name string of each fragment (asan example), or may be looked up from a hashing table (as an example),or may be performed in any other way.

For clarification purposes only, in the case of using a hash functionoperated on the Name string of each fragment (the Name string is theargument for the hash function), the fragments of the original contentfile 520 may be named, as an example, “300”, “301”, “302” up to “398”corresponding to the fragments 300, 301, 302, 303, 304, 305 up to 398(the string name is identical to the fragment reference number in thisexample for clarity only. Optionally, the strings is unique and have asequential running number or symbol embedded); the hash function thatoperates on the strings may result, as an example, in the followingtranslation:

Hash-Function(“300”)=1, Hash-Function(“301”)=3, Hash-Function(“302”)=2,Hash-Function(“303”)=4, Hash-Function(“304”)=5, Hash-Function(“305”)=2,Hash-Function(“306”)=3, Hash-Function(“307”)=5 and so on up toHash-Function(“398”)=5, which means that fragment 300 is allocated topeer client type #1, fragment 301 is allocated to peer client type #3,fragment 302 is allocated to peer client type 2, fragment 303 isallocated to peer client type 4, fragment 304 is allocated to peerclient type 5, fragment 305 is allocated to peer client type 2, fragment306 is allocated to peer client type 3, fragment 307 is allocated topeer client type 5, and so on up to fragment 398 that is allocated topeer client type #5; the result is illustrated in the hashed records581, 582, 583, 584, and 585, that correspond to peer client types #1,#2, #3, #4, and #5, respectively. Similarly, the result of using a hashfunction on the fragments of the original content file 530 (by using thestring sequences “400”, “401”, “402” up to “487” as arguments) isillustrated in the content-striped hashed records 591, 592, 593, 594,and 595, that correspond to peer client types #1, #2, #3, #4, and #5,respectively.

The steps of striping each content into ‘n’ peer client types (alsoillustrated by FIG. 3) may be performed by the control server 50 or byanother suitable computing device, such as one of the peer clients. Theoriginal content files (520, 530) may be stored in the control server50, or may be distributed on the fly. If the original content files aredistributed on the fly, the hash function is provided in advance anddistributed to the peer clients of the cluster.

In one embodiment, the method for hashing the original content filefeatures the following requirements:

a) Every original content file is hashed orthogonally to all of theother content-striped hashed records, such that the Fragment-to-typerearranging sequences have little or no correlation between themselves,or between themselves and any time-shifted version of themselves;without limiting the scope of the invention, this can be readilyachieved, for example, by choosing a good hash function, such that asmall variation in the name string yields a completely differentrearranging sequence, or by choosing different primitive pseudo-randompolynomials per original content file, or by using different hashingtables per original content file.

b) Every Fragment-to-type rearranging sequence has little or nocorrelation with time-shifted copies of itself, without limiting thescope of the invention, this can be readily achieved, for example, bychoosing a good hash function, or by using primitive pseudo-randompolynomials, or by generating good hashing tables.

c) The method used for hashing should yield a Fragment-to-typerearranging sequence that is predictable. All of the methods abovecomply with this requirement in a non limiting fashion.

Still referring to FIGS. 2 and 3, the ‘n’ peer client types (n=5 in theillustrated example) of content-striped hashed records per each of theoriginal content files 520, 530, are transferred via the network 1 toall of the peer clients, such that all peers set as peer client type #1(100 a up to 100 z) receive the content-striped hashed records of peerclient type #1 (content-striped hashed record 581 belonging to content520, and content-striped hashed record 591 belonging to content 530),all peers set as peer client type #2 (101 a up to 101 z) receive thecontent-striped hashed records of peer client type #2 (content-stripedhashed record 582 belonging to content 520, and content-striped hashedrecord 592 belonging to the content 530), all peers set as peer clienttype #3 (102 a up to 102 z) receive the content-striped hashed recordsof peer client type #3 (content-striped hashed record 583 belonging tocontent 520, and content-striped hashed record 593 belonging to content530), all peers set as peer client type #4 (103 a up to 103 z) receivethe content-striped hashed records of peer client type #4(content-striped hashed record 584 belonging to content 520, andcontent-striped hashed record 594 belonging to content 530) and allpeers set as peer client type #5 (104 a up to 104 z) receive thecontent-striped hashed records of peer client type #5 (content-stripedhashed record 585 belonging to content 520, and content-striped hashedrecord 595 belonging to content 530).

In one non-limiting embodiment, the control server 50 distributes thecontent-striped hashed records to the appropriate peer clients.Alternatively, the content-striped hashed records are pulled by theappropriate peer clients.

The following are methods for propagating the content-striped hashedrecords to the peer clients. It is to be noted that the distribution ofthe content-striped hashed records among the peer clients can be doneusing conventional peer-to-peer file sharing techniques (so that thedistribution load on the control server is reduced), or it can be donedirectly by the control server to each of the peers, or using cacheservers, but is not limited to these implementations.

It is to be noted that although the content-striped hashed records aresometimes disclosed as being distributed to the peer clients as a singlefile per content-striped hashed record, distribution is not limited tothis implementation, and it is also possible to distribute eachcontent-striped hashed record as a sequence of several files, or it ispossible to aggregate several content-striped hashed records into asingle file, or to use any other alternative implementation.

The peer clients receive the various content-striped hashed records, andstore them in their memories. The memory may be Flash, Hard Disk, RAM,or any other type of memory in a non limiting fashion. Peer 100 a, setas peer client type #1, as an example, stores both content-stripedhashed records 581 and 591 (depicted as fragments 300, 308, 312 up to396 and fragments 403, 407, 410 up to 483 respectively) because both areset as peer client type #1.

Optionally, the actual peer storage may reside outside the peer itself,for example, on an external flash memory connected to a set top box. Thepeer may include a file system that manages that external memory.

In one embodiment, whichever way is used for distributing thecontent-striped hashed records among the peer clients, each peer clientby itself stores only about 1/n of the total original content that wasdistributed, and therefore a plurality of clients, each havingrelatively small memory size, can be used to store very large volumes oforiginal content.

It is to be noted that the content stored in each peer by itself isuseless, because it represents only a small portion of each of theoriginal content files, and these portions represent content fragmentsthat are not in a sequential order. Presentation of the content is notpossible given the data stored in a small amount of peers.

In one embodiment, all peers of the same peer client type store theexact same data (content fragments). As there are more peers storing thesame data, the redundancy of the system increases.

When a peer client starts to consume content, for example, in order towatch a movie, the peer client may inquire the control server 50 foravailable content, or alternatively access the list of available contentthat may be stored in any reasonable location, such as, but not limitedto, the peer client itself or another peer client.

In one embodiment, the peer client may inquire the control server 50 foravailable content, and the control server 50 may then transmit to therequesting peer client a retrieval function. The retrieval function maybe (i) the hash function that was used to generate the Fragment-to-typerearranging sequence, or (ii) a designated content fragments retrievalfunction, or (iii) a designated peer types retrieval function, or (iv)any other method that enables the peer to retrieve the required contentfragments from the other peers. Alternatively, the hash function mayalready be known to the peer client in advance.

The requesting peer client, now equipped with the information used togenerate the Fragment-to-type rearranging sequence of the desiredoriginal content, has a complete and accurate way of determining whichpeer client type stores which fragment of the desired content.

The requesting peer client may then use the hash function to have theFragment-to-type rearranging sequence, and determine the location of thedesired content fragments.

Referring to FIG. 4, in one embodiment where a hash function is used togenerate the Fragment-to-type rearranging sequence, the peer client maycalculate the location of the first fragment of the desired content byevaluating, for example, the expression (thefunction)—Hash-Function(“300”), which yields the result ‘1’, meaningthat the first fragment 300 can be located at any peer set as peerclient type #1 (one of them is depicted as 100 a in FIG. 4). It is to benoted that content file 520 is depicted as an example, and in this casethe controller sends the requesting peer client the name string of thefirst fragment, which is “300”. It is assumed that content file 520 is astreaming video file throughout the rest of the section in a nonlimiting fashion.

In this example, the requesting peer client now contacts peer client 100a, and requests the first fragment 300; peer client 100 a starts sendingthe requested fragment 300 to the requesting peer client at time T1 viathe network(s) as communication session 501 that ends at time T3 (it isassumed, as a non limiting example, that sending one fragment takes twotime ticks, and that each fragment represents a frame of video). At timeT3, the requested fragment 300 is completely received by the requestingpeer client, and is stored as fragment 300 in its streaming (ordownload) buffer 520 b; the requesting peer client can start streamingthe first video fragment 300 at time T3, and until T4. It is assumed inthis example, in a non limiting fashion, that each video frame is playedfrom T[n] to T[n+1] (one time tick), and thus the time it takes for apeer client to uplink the fragment is twice as long as it takes tostream the fragment when playing it, which corresponds to the situationwhere each peer client has twice the downlink bandwidth than uplinkbandwidth, and the downlink bandwidth is equal to the video playbackstreaming bandwidth.

The requesting peer must prepare the second fragment 301 for streamingplayback no later than time T4 in order to guarantee smooth playbacktransition from fragment 300, and it thus continues by evaluating theexpression Hash-Function(“301”), which yields the result 3, meaning thatthe second fragment 301 can be located at any peer set as peer clienttype #3 (one of them is depicted as 102 a in FIG. 4); the requestingpeer client now contacts peer client 101 a at time T2, and requests thesecond fragment 301; peer client 102 a starts sending the requestedfragment 301 to the requesting peer client at time T2 via the network(s)as communication sessions 502 that ends at time T4; at time T4, therequested fragment 301 is completely received by the requesting peerclient, and is stored as fragment 301 in its streaming (or download)buffer 520 b; the requesting peer client can now continue with thestreaming video playback from T3 to T4. This process is repeated forfragments 302, 303, 304, 305 as depicted in the inter-peer communicationsessions 503, 504, 505 and 506 respectively; the depicted peer activityresults in a reconstructed original content 520, which is assembled inthe requesting peer client's streaming buffer 520 b, and streamed atshort duration (streaming of fragments 300-305 is depicted forclarification purposes, but the process is maintained until the lastfragment 398 is received and streamed).

It is to be noted that in the non-limiting case of video content, eachframe/fragment has a duration of about 30 milliseconds, which means thateach time tick is 30 milliseconds, and the user can start streamingplayback of the content approximately 60 milliseconds after firstrequesting the content; this results in an instantaneous video on demanduser experience.

It is to be noted that although each peer client's uplink bandwidth is ½the bandwidth of the streaming video content in the described example,the collaboration of several peer client types (as described) results inan aggregated uplink streaming capability that is sufficient to supportthe full bandwidth of the video playback stream; this advantage is notlimited to downlink/uplink ratios of 2/1 (as described in the example),and can be generally applied to any downlink/uplink ratio, as can befound in many asymmetrical broadband connections, such as, but notlimited to, ADSL, DOCSIS, and PON. This of course does not limit thepeer-assisted system's ability to support symmetrical bandwidthconnections, such as, but not limited to, ETHERNET, certain PONs andxDSLs. The aggregated uplink streaming effect is possible as a directresult of using a pseudo-random Fragment-to-type rearranging sequencethat ensures that no consecutive fragments are stored in one peerclient.

It is to be noted that the requesting peer in the above example may beone of peers 100 a-z, 101 a-z, 102 a-z, 103 a-z or 104 a-z, or even apeer client that does not participate in the collaborative storage ofthe original content.

It is to be noted that although the above example describes a fragmentextraction from the five peer client types 100 a, 101 a, 102 a, 103 a,104 a, the requesting peer client can choose to extract any specificfragment from all peer clients that are assigned the peer client typethat holds this fragment, so that any fragment extracted from 100 a forexample, can readily be extracted from any of the other peers assignedto peer client type #1 (100 a-z); this disclosed redundancy mechanismcan also be exploited for best path selection, as disclosed below.

It is to be noted that the assurance that a specific content fragmentactually resides in a peer client that is predicted by theFragment-to-type rearranging sequence is guaranteed by the fact that thecontent is distributed a priori to the consumption process, andregardless of what peer clients choose to consume.

The real time extraction of all requested fragments in sequentialon-time streaming order is possible because of the requesting client hasenough available peers from all peer client types, at almost any pointin the time of streaming as a result of the pseudo-random distributionof fragments of content among a pre-determined (a priori) cluster orpeer clients (as deterministically determined by the control server).

Optionally, the process of determining where the next fragment resides,and the gathering of the fragments are done with no need for real-timeintervention of the control server, and this is a direct result of usinga pseudo-random Fragment-to-type rearranging sequence that is totallypredictable and calculable by each peer client in the peer-assistedsystem.

FIG. 4 illustrates one embodiment where a second peer client isconsuming the content 530 at time T1, in parallel to the alreadydescribed process of the first peer client consuming the content 520.The second peer retrieves and assembles the content 530 fragments 400,401, 402, 403, 404, and 405 as illustrated by the inter-peercommunication sessions 510, 511, 512, 513, 514, and 515 respectively (ina process similar to the one described for the first peer), andconstructs its streaming buffer 530 b. The peer cluster that consists inthis example of peers 100 a, 101 a, 102 a, 103 a, 104 a is now requiredto uplink all of the requested fragments to both of the requestingpeers, such that the streaming continuity of both stream 520 b andstream 530 b are maintained throughout the process; the followingdescription is disclosed as a method of achieving this requirement.

Since the pseudo-random method that was used to generate theFragment-to-type rearranging sequences yields two uncorrelated sequencesfor the two contents 520, 530 (in the examples above two different namestring sequences were used for the two contents as arguments to the hashfunction), the two uplink streams generated by the peer clients for thetwo requested contents are (optionally) statistically evenly spread allover the peer clients in the cluster, and this assures a non-blockingcluster operation; this effect is demonstrated in FIG. 4 as follows:since in this example the downlink/uplink bandwidth ratio is 2/1, at anygiven time of the streaming process four different peer clients muststream uplink data in order to support the streaming of the two contentfiles; in the time interval between T2 and T3 four different peerclients—100 a, 102 a, 101 a and 103 a—actively uplink streaming data, inthe time interval between T3 and T4 four different peer clients—102 a,101 a, 103 a and 104 a—actively uplink streaming data; in the timeinterval between T4 and T5 four different peer clients—101 a, 103 a, 104a and 100 a are actively uplink streaming data; in the time intervalbetween T5 and T6 four different peer clients—103 a, 104 a, 100 a and102 a—actively uplink streaming data; in the time interval between T6and T7 four different peer clients—104 a, 101 a, 102 a and 103a—actively uplink streaming data; it is clear that at any given timeindeed four different peer clients are collectively producing thestreaming load needed to support the two content streams, in such a waythat most of the cluster (⅘ in this specific example) is utilized at anygiven time, and such that no blocking occurs; this high utilization isaccomplished as a direct result of the uncorrelated nature of the twosequences used to spread the fragments of the two contents across thecluster.

The above described non-blocking cluster operation may be applicable toany number of content streams, and any number of peer client types, aslong as all sequences used to spread all of the content streams'fragment across the cluster are uncorrelated, and as long as theaggregated uplink bandwidth of the cluster approximately equals orexceeds the aggregated bandwidth of all the streams transmitted at anygiven time.

FIG. 5 illustrates one embodiment where a second peer client isconsuming the same content that is consumed by the first peer client(content 520), but with a time shift. The second peer client startsrequesting at time T3 (two time ticks after the first requesting peerclient). The first requesting peer client gathers fragments 300, 301,302, 303, and 304 as illustrated in the inter-peer communicationsessions 501, 502, 503, 504 and 505 respectively; the illustrated peeractivity results in a reconstructed original content file 520, which isassembled in the first requesting peer client's streaming buffer 520 c.The second requesting peer client gathers the same fragments 300, 301,302, 303, and 304 (but two time ticks after the first requesting client)as illustrated in the inter-peer communication sessions 541, 542, 543,544, and 545 respectively; the illustrated peer activity results in areconstructed original content file 520, which is assembled in thesecond requesting peer client's streaming buffer 520 d.

Since the pseudo-random Fragment-to-type rearranging sequence hasideally almost a zero autocorrelation (meaning that any two time shiftedversions of the same sequence are uncorrelated), the two uplink streamsgenerated by the peer clients for the two time shifts of the samecontent are statistically evenly spread all over the cluster, and thisassures a non-blocking cluster operation; this effect is demonstrated inFIG. 5 as follows: since in this example the downlink/uplink bandwidthratio is 2/1, at every given time of the streaming process fourdifferent peer clients must stream uplink data in order to support thestreaming of the two time shifted streams in steady state; in the timeinterval between T4 and T5 four different peer clients—101 a, 103 a, 100a and 102 a—actively uplink streaming data, in the time interval betweenT5 and T6 four different peer clients—103 a, 104 a, 102 a and 101a—actively uplink streaming data; it is clear that at any given steadystate time indeed four different peer clients are collectively producingthe streaming load needed to support the two time shifted streams of thesame content, in such a way that most of the cluster (⅘ in this specificexample) is utilized at any given time, and such that no blockingoccurs; this high utilization is accomplished as a direct result of thezero autocorrelation nature of the sequences used to spread thefragments of the two contents across the cluster.

The above described non-blocking cluster operation is readily applicableto any number of shifted steams of the same content (which is typical toa popular content being consumed by many peer clients at the same time,but with different viewing starting times), and any number of peerclient types, as long as all sequences used to spread all of the contentstreams' fragments across the cluster have close to zeroautocorrelation, and as long as the aggregated uplink bandwidth of thecluster equals or exceeds the aggregated bandwidth of all the streamstransmitted at any given time.

FIG. 7 illustrates one embodiment of a route selection for contentfragments retrieval. As an example, in accordance with FIG. 4 and FIG. 5and without limiting the generality of the embodiment of the presentinvention, the cluster has five peer clients of different types 100 a,101 a, 102 a, 103 a, and 104 a, each located in a different region ofthe interconnecting network that is composed of routing nodes 201, 202,203, 204, 205, 206, 207, 208, 209, 210, 211, 213, 214, 214, 215, 216,and 217; the exemplary network of FIG. 7 can be a representation of theInternet, an ISP network, an operator network, a corporate network, orany other type of network capable of routing data in-between peerclients; the dashed lines applied to connect the peer clients with thenetwork routers can represent a point-to-point connection, an operatoraggregation network (switched or routed), DSLAM connections to clients,CATV connections to client, or any other means of connecting the peerclients with the interconnecting network composed of said routing nodes.

For example, when peer client 103 a assembles content fragments forcontent consumption, it needs to reach all of the other peer clients 100a, 101 a, 102 a, 104 a for fragment retrieval, since all participatingpeer client types of the content-striped hashed records must be accessedin order to reconstruct the original content; the probable route from103 a to 102 a consists of nodes 215, 213, 203, 212; the probable routefrom 103 a to 100 a consists of nodes 215, 213, 203, 202, 201, 205, 206;and the probable routes to other peer clients are similarly constructed;it is clear that with this initial cluster size of peer clients, eachpeer client must reach across most regions of the interconnectingnetwork in order to retrieve all fragments of the content beingassembled.

Referring now to FIG. 8, the cluster of FIG. 7 evolves and increases insize with the addition of new peer clients; it is noted that althoughthe number of peer clients has increased from five to thirteen, thereare still only five peer client types, such that some of the peerclients are storing the exact same content fragments as other peerclients in the cluster (belonging to the same peer client type). When,for example, peer client 103 a assembles content fragments for contentconsumption, it still needs to reach all of the peer client types forfragment retrieval, but this time it has some choices of which specificpeer client from each peer client type to turn to; when 103 a ischoosing which peer client of peer client type to turn to, it has thechoice of 102 a and 102 b; the route to 102 b consists of nodes 215,213, 203, 212, while the route to 102 a consists of only node 215; it isclear that 103 a should prefer to fetch content fragments from 102 a andnot 102 b, since the shorter route allows it to enjoy a reduced latency,reduced probability of packet dropping, and the overall advantage oftraversing a smaller part of the inter-network. Peer client 103 a has ashort route not only to 102 a, but also to all other peer clients of allthe rest of the client types 100 a, 101 a, 104 a, which means that peerclient 103 a can assemble any content that is stored in the cluster bytraversing no further than node 215 of the network; if one of the peerclients 100 a, 101 a, 102 a, 104 a is unable to respond to peer client103 a requests (for example, if one of the PCs hosting one of thesepeers is off-line), then peer client 103 a can fetch the specificcontent fragments belonging to the unavailable local peer client fromfarther in the network; this mechanism includes an inherent redundancymechanism combined with a minimal route selection mechanism.

Peer client 103 b has almost all peer client types available locally bypeer clients 100 b, 101 b, 102 b, but it needs to look further into thenetwork to retrieve content fragments belonging to peer client type #5,for example, by turning to peer client 104 e or 104 a (since both thesepeers are located four node hops from 103 b, each of them can be a goodselection under the minimal hop criteria); other peer clients like peerclient 101 c, 104 e, 100 d, or 103 d are more isolated, and have tofetch most fragments from distant network locations.

In one embodiment, as more and more peer clients join the cluster, thereis an increasing statistical probability that most of them (and maybeeventually all of them) are able to retrieve all content fragments ofall stored contents from within close network proximity. This method ofpeer-assisted best route selection is possible because of twofundamental advantages of the disclosed peer-assisted system. One is thefact that the content is evenly spread over all participating peerclients a priori to content consumption, and regardless of what the peerclients choose to consume, so that the statistical availability ofrelevant peer client types is guaranteed as long as the control serverassures that there are more or less the same number of peer clientsassociated with each of the peer client types. The second advantage isthe fact that since the control server can limit the amount of contentthat is stored in the cluster, it is statistically guaranteed thateventually there will be enough peer clients from all peer client types,such that close proximity to any of them can be assured from any peerclient in the cluster.

Without limiting the scope of the embodiments, the minimal hop criteriamay be implemented, for example, by each peer client, by calculating thenumber of hops per peer client candidate of each peer client type, or itcan be pre-calculated by the control server in the form of a networknodes map/graph, or it can be done in any other way.

It is finally noted that the discussed embodiments are particularlyuseful in a non limiting fashion to a situation where a predeterminedamount of video content (for example 1000 full-length motion pictures)is to be offered to an increasingly growing number of peer users, suchthat eventually the peer-assisted system has to transport an enormousamount of streams of the predetermined video content via a network (forexample the Internet); in such a case, the ability to fetch eachfragment from the right location can protect the network fromcongestion, can save the ISP or operator a lot of unnecessary networkactivity to remote locations (that is more expensive than localfetches), and can increase the quality of the video stream.

It is to be noted that although the example above describes the peerselection criteria as the minimal hops needed to reach each peer client,this is done in a non limiting fashion, and there are other ways ofdefining the best route criteria, such as, but not limited to, theminimal latency to each peer client criteria, or choosing a specificpeer client from each peer client type such that the most available peeris selected (the one that can support maximal up-link throughput in thatspecific time).

In one embodiment of the invention, a graph of the networkinterconnections enables a peer client to determine the best peer clientto approach for any specific fragment. Still referring to FIG. 8, thefollowing process illustrates a method for constructing the networkinterconnections graph in assistance with the peer clients.

a) The control server (not illustrated in FIG. 8, but may be connectedto any node in the network) selects an arbitrary routing node in thenetwork. (The arbitrary routing node may also be the control serveritself). The arbitrary routing node is referred to as the focal point.In this example, it is assumed that the focal point is node 201.

b) Each peer client when going on-line (in a non limiting fashion)initiates a trace-route test to the focal point; the results of thattest are in the form of all connecting nodes between the peer client andthe focal point; as an example, when peer client 103 a initiates thetest, the results are nodes 215, 213, 203, 204 which are the connectingnodes between 103 a and the focal point 201. The results of all thesetests done by all peer clients are reported to the control server, andare stored there.

c) The control server looks at all the accumulated reported trace-routetests results (lists of connected nodes) of all of the controlled peerclients in the cluster; it dynamically constructs a graph of thenetwork(s) using the following heuristic: all the reported lists areconnected to the focal point; any node that appears in more than onelist is reduced into a single node, while maintaining the sum of all ofits connections to other nodes in said lists.

d) Step c is repeated for each new report that comes from a new peerclient or from a peer client that has switched on-line (in a nonlimiting fashion).

e) The result of steps c and d is a constantly updated graph of thenetwork interconnections.

Optionally, the dynamically constructed graph is sent to all peerclients, and enables them to accurately pick the closest peer client forfragment extraction.

It is to be noted that the above method does not map portions of thenetwork that do not lead to a peer client, so, for example, nodes 214,216, 210, 208, 209, 207 are not mapped, since no peer client initiates atrace-route test that includes them in the path to the focal point. Theywill be mapped as soon as more peer clients join the cluster and areconnected to these nodes somehow.

It is to be noted that in case of a very large interconnecting network(the global Internet for example), it may be impractical to send theentire graph (that can include many thousands of nodes) to each client;in this case, the control server (or servers) may prune the graph andtransmit each peer client only a small fraction of the graph thatrepresents the portion of the network that is in the peer client'svicinity (including the related peer clients attached to the nodes ofthat portion of the network).

It is to be noted that several control servers can split the loadbetween themselves, such that each server maps a portion of the network.

Another method of choosing the nearest peer clients for contentfragments reassembly is disclosed as follows; still referring to FIG. 8,the control server selects several network nodes that are more or lessequidistance from each other; nodes 212, 206, 209, 215 are taken as anon limiting example; these nodes are called reference nodes. Each peerclient calculates the number of hops to each reference node, andconstructs a j-dimensional coordinate point (in our example, j=4); peerclient 103 a, for example, has the coordinates of [3, 6, 5, 0] since itis located 3, 6, 5, and 0 hopes from 212, 206, 209, 215 respectively.The peers have a list of all other relevant peers' coordinates (which issynchronized and updated by the control server in a non limitingfashion); when a requesting peer client wants to select a peer clientfor fragment extraction, it chooses a peer client with the minimalj-dimensional distance from it; the minimal distance criteria can beroot-mean-square based as a non limiting example.

Still referring to FIG. 8, when a new peer client is registered with thepeer-assisted system, the control server has to decide which peer clienttype to allocate to it; the following process discloses an efficientmethod for all future inter-peer-clients communication:

a) The control server assumes that the newly added peer client is ofpeer client type #0, and calculates the aggregated hop count for theentire cluster; this is done by summing up all hop counts from each peerclient to all optimally selected peers used to fetch all peer clienttypes of fragments; the result of this calculation is a measurement ofhow efficient the current cluster configuration is (it is noted that thecriteria used in this example is based on hop count, but any othercriteria such as minimal latency or other criteria can be used).

b) The server repeats the aggregated hop count calculation of step (a) atotal of ‘n’ times, each time with the assumption that a different peerclient type is allocated to the newly added peer client.

c) The newly added peer client is assigned the peer client type thatresulted in the minimal aggregated hop count calculation in steps (a)and (b).

The above method is one way of assigning peer client types to a peerclient, but implementation is not limited to this method, and other waysare possible.

It is to be noted that the above method may be implemented on the entirenetwork, or it may be implemented on several portions of the network,such that the aggregated hop count calculation and peer client typeassignment are done independently for each portion.

The disclosed peer-assisted embodiments exploit Fragment-to-typerearranging sequences in order to determine how content fragments arespread among peer clients for storage. Any peer client who wishes toreconstruct the original content, must have the exact rearrangement keyin order to do so. The following process discloses a method that takesadvantage of this effect in order to secure the content that is storedin the peer-assisted system.

a) The control server chooses a unique key to a Fragment-to-typerearranging sequence for spreading the content fragments of a specificcontent. The key may be in the form of a primitive polynomial in thecase that a pseudo-random primitive polynomial is used to generate thesequence, or it may be a string sequence that is used by the hashfunction as was given as an example above, or it may be any other keycapable of generating a unique Fragment-to-type rearranging sequence.

b) The unique key is used to spread the specific content throughout thecluster of peer clients.

c) When a peer client requests from the control server to consume aspecific content, the control server authenticates the identity of thepeer client.

d) After authentication, the control server sends the requesting peerclient the key of the Fragment-to-type rearranging sequence that wasused to spread the requested content; the key is sent in an encryptedform, to be decrypted only by the requesting peer client.

e) The requesting peer client decrypts the encrypted key, and uses it tocalculate the exact location of each of the fragments of the requestedcontent.

With the above process, an unauthorized party cannot assemble theoriginal content, since it is missing the key that can enable it topredict where the next fragment of content is located among the peerusers. The content is made secure this way without the need to encryptand decrypt the content itself, although an additional encryption of thecontent itself may be added in a non limiting fashion.

It is to be noted that when used in conjunction with modern videocompression methods (such as, but not limited to, MPEG-2, MPEG-4 andH.264), and when using a small fragment size about the size of one videoframe, the disclosed security mechanism also protects against thepossibility of an unauthorized party accidentally decoding a frame or asequence of frames of the protected content, since modern videocompression methods require the information of more than one sequentialframe to decode the sequence, and therefore even if one fragment isavailable, it cannot be used to reproduce any of the video frames.

Referring again to FIG. 4, when the described embodiments are used forthe reconstruction of the streaming content, the requesting peer clientmay keep in its streaming buffer 520 b only several content fragmentsahead of the presentation point to assure the smoothness of streaming;by doing so, and by erasing any already played-back portions of thestreaming buffer, the peer-assisted system assures that at no point intime there exists a sequence longer than several content fragments ofany original content, since the content itself is spread among the peersprior to assembly for consumption. Without limiting the embodiments, thefragment may be at about the size of one video frame, so thatpractically no file sequence longer than several frames of the originalcontent can be found in any peer client.

Referring back to FIG. 2, a supplemental streaming server 60 may beadded to the cluster in order to assist its operation when the clusteris small, when temporary additional streaming capacity is needed, onoperational problems, on a lack of peer clients of a specific type, orwhen the system operation is jeopardized. The following exampledescribes one optional embodiment to achieve this functionality. Thesupplemental server 60 may be constructed from multiple independentsoftware clients, each emulating the operation of a full peer client ofa certain peer client type. All emulated clients' software may run onthe same server machine, or on several machines. The emulated clientsare of all peer client types in the cluster, such that all the contentis stored on the supplemental server 60. The aggregated bandwidth of allemulated peer clients in the supplemental server 60 is inherently addedto the cluster streaming capacity, such that each real peer client seesthe supplemental streaming coming from the supplemental server 60 asregular peer clients, and therefore no changes to the peer-assistedsystem are required. Optionally, when clients from a certain type aremissing the supplemental server may emulate the clients of the missingtype.

FIG. 6 illustrates a case where a peer client is retrievingapproximately the maximum amount of content fragments made possible byits available downlink bandwidth, also referred to as boost phase. Theboost phase is useful, for example, when starting to retrieve a newcontent, when implementing trick play (such as jumping to a new positionwithin a currently played content), or after a network failure. In theillustrated boost phase, the retrieving peer client approximatelysimultaneously requests a plurality of content fragments (300, 301, 302,303), and upon reception, continues with a steady state content fragmentrequest scheme (illustrated by content fragments 304, 305). In thiscase, the boost phase shortens the time-to-play between the contentrequest and actual content playing.

FIG. 9 illustrates N types of peer clients, each peer client type isassociated with a plurality of peer clients. Optionally, all peerclients associated with the same peer client type store the sameinformation. Any group of N peer clients belonging to N distinct peerclient types can be used to completely reconstruct the content stored inthe cluster.

In one embodiment, illustrated in FIG. 10, a plurality of groups of peerclients are formed (Group A 822, Group B 824, Group C 826, etc.). Thepeer clients included in each group store together one copy of theentire information stored in the cluster. Optionally, each group isspanned by one network node, such that retrieval of content fragmentsbetween its members is transported within the span of the one networknode.

FIG. 11 illustrates an example wherein a peer client located in group A822 is assembling a content, and first tries to retrieve the necessaryfragments from peer members belonging to group A (since they aretopologically closest to it). If a peer client of a certain peer clienttype is unavailable (illustrated in the figure as darkened peers 1-2 and1-5), the assembling peer will look for the desired content fragment ofthe peer client type in other groups. For example, the content fragmentsthat should have been available from peer 1-2 will be taken instead frompeer 2-2, or possibly from peer 3-2.

FIG. 12 is an example of a type-to-physical-address associationinformation, illustrated as a conversion table, used by peer members ofgroup A. In the illustrated table, each peer client entry includes thepeer's physical address (optionally including a port number whenimplemented over the Internet). Peer clients from group A may search forcontent fragments in the first address line 828, corresponding tophysical addresses of all peer clients belonging to group A.

FIG. 13 illustrates one embodiment wherein the peer clients are notgrouped. As an example, in that case, peer client 2-2 may retrieve acontent fragment associated with peer client type 5 from peer 2-5 orK-5, or other available peer clients associated with peer client type 5not illustrated in the figure. Optionally, peer client 2-2 makes itschoice so as to minimize a cost function (also referred to as anoptimization function). In the case where the cost function minimizesthe number of layer-3 hops between the peer clients, peer 2-2 shouldselect its closest available peer client, according to a networktopological table as seen by the peer client 2-2. Optionally, thenetwork topological table is derived from a general inter-connectingnetwork topology map. FIG. 14 illustrates an example of a topologicaltable of peer client 2-2 such that when peer client 2-2 decides whichcontent fragment associated with peer client type 5 to retrieve, peerclient k-5 is selected since it is the closest to peer client 2-2. Theentries in the topological table include physical addresses in which thespecific peer clients can be located.

FIG. 15, FIG. 16 and FIG. 17 illustrate embodiments of systems andcorresponding methods for supplying distributed stored content to enduser devices that are grouped in routing clusters. The distributedstored content includes, but is not limited to, Video on Demand (VOD),streaming content and progressive download featuring fast start. Thedistributed content is streamed within the routing clusters from aplurality of peers to a destination peer, and by that reduces the amountof streaming load on the higher-level operator's transport network, andeliminates the need for expensive VOD streaming servers.

Referring to FIG. 15, the VOD content is distributed between theillustrated end user STB devices 740, 741, 748 and 749. Some of the VODcontent may be supplied by a centralized VOD server 705. Receiving thecontent from STB devices may be less expensive than, and eliminate thebottlenecks associated with, distributing the content from a centralizedVOD server 705, since the content routings from STBs are containedwithin the relatively lower levels of the network 730, 739 (such as, butnot limited to, within the DSLAM, PON router, CMTS router, or wirelessbase station router) and last mile transport channels 770, 771, 779 and778 (such as, but not limited to, twisted pair, fiber optics, coax,wireless or other), and do not overload the relatively bandwidth limitedtransport channels of higher routing levels 780, 789, 788.

The discussed systems enable a user to start viewing a streaming contentwithin a short duration from requiring the content. And the user is notrequired to download the entire file before viewing it.

Optionally, initial VOD content stored on server 702 a or 702 b isdistributed via the operator network among predetermined groups of STBdevices; STBs 740, 741, 748 and 749 form such a group. It is to beunderstood that the STB may include any type of peer client such as, butnot limited to, a computer; moreover, although only four STBs areillustrated, there may be, as a non-limiting example, 100-10,000 STBs ineach group, or even more. According to this embodiment, the partitioningof all STBs into groups is determined in such a way that every STB of acertain group is connected to all other STBs in this group via a minimalrouting path, such that all routing paths between the group's STBs arecontained by a single access router 730 or a router that controls agroup of access routers 704. Optionally, the process of partitioning ismanaged by the controlling server(s) 702 a or 702 b, which may or maynot be the same server(s) that store the initial VOD content fordistribution.

After partitioning the STBs into groups, the controlling server(s) 702 aor 702 b initiates a process of distributing the VOD content between allof the associated STBs 740, 741, 749, 748 in such a way that after thedistribution process is complete, all of the VOD content fordistribution is collaboratively contained in the long term storagebuffers 793 of all the STBs of a group, and such that each of the groupscontains a copy of all relevant VOD content. For example, if there are Ngroups storing the same content, then there are N complete copies of theoriginal VOD content.

A non limiting example for the content distribution phase is as follows:in a system that contains 100,000 STBs (one per user), and that ispartitioned into 100 groups of 1000 STBs, each group of 1000 STBscontains all of the VOD content, such that 100 copies of the originalVOD content are produced. If we assume that the original VOD content hasa total volume of 1TByte (one Tera Byte, the equivalent of about 1,000movies), then in order for each group to contain all of the content, theaverage size of the long term storage buffer of each STB 793 should notbe smaller than 1 Gbyte (or 1/1000 of the total size of the entire VODcontent of the operator's system). It is apparent that the size of theSTB long term storage buffer is much smaller than the size of the totalVOD content.

Optionally, the initial VOD content distribution among STBs for storagedoes not overload the operator's transport network. This may beaccomplished, as a non-limiting example, by performing the distributionin times that the network has minimal activity, and/or by spreading theprocess for storage distribution across long time periods.

Optionally, the controlling server(s) 702 a or 702 b keeps track ofwhich content is stored where. Optionally that list of contentallocation is stored both in the controlling server(s) and in each ofthe STBs.

The division of the complete VOD content to many STBs of a group may bedone, in a non limiting fashion, such that each STB contains severalcontent files, one content file, a fragment of a content file, severalfragments of a content file, several fragments of several content files,or several fragments of all content files, as long as the entire VODcontent is collaboratively contained inside the long term storagebuffers of all STBs of a group.

Each group of STBs may contain more than one copy of the entire VODcontent, or a copy of only a portion of the entire VOD content in anon-limiting fashion.

It is to be noted that although the long term storage buffer 793 of STB741 (and all other buffers of other STBs that are not illustrated) isillustrated as being contained inside the STB, it is not limited to thisimplementation, and other options exist. For example, the long termstorage buffer may be separated from the STB, such that the STB (or anycomputing device, such as, but not limited to, a PC) has access to thelong term storage buffer that is contained in a separate enclosure; Asanother example, a regular STB 747, 746 may be used, and the entirestorage and processing may be done in a separate box 745 that handlesall of the storage and transactions needed to realize the distributedVOD system. The separate box 745 drives the regular STB such that allmentioned VOD services are accessible to the end user.

It is to be noted that STB 741 may be implemented in its entirety by anycomputing device with a memory such as, but not limited to, PC 754.Another optional embodiment for the STB may be a home or office gateway745 that has access to a storage memory (either internally, orexternally); the gateway may be connected to operator's line 775 on onehand, and to the user's interactive device(s) (that may be, but are notlimited to, a regular STB 747, 746, a PC 755, or an audio system of somesort) on the other hand; in this case, the gateway assumes all thefunctionalities that are associated and disclosed in conjunction withthe described STB 741 device, such that any occurrence of the word STBor end-user-device herein also includes the possibility of a home and/oroffice gateway.

Optionally, after the initial VOD storage distribution is done, anongoing process of content updating is performed in order to make surethat VOD content stored in each of the STB groups is up-to-date; in thisprocess, only the delta of the content needs to be transported to theSTBs for collaborative storage in a non limiting fashion.

After a predefined amount of the VOD content is distributed for storageto all STBs, the process of user VOD content consumption may begin. Forexample, a user having STB 749 may request a certain content; therequest propagates to the controlling server(s) 702 a or 702 b, which inreturn send the requesting STB 749 a pointer to the location of thefirst fragment stored in a certain STB in the group (STB 740, forexample). STB 749, now equipped with the pointer to the beginning of thedesired content storage, sends a request to STB 740 to starttransmitting it the desired content. In this example, the streamedcontent flows from STB 740 through the last mile transport channel 770(such as, but not limited to, a xDSL twisted pair or PON fiber) and isrouted by router 730 (such as, but not limited to, a DSLAM or a PONrouter) back into a last mile transport channel 779 that delivers thestreamed content to the requesting STB 749. The resultant streaming pathis clearly minimal in the sense that only low levels of the operator'stransport network 770, 730, 779 are involved in the VOD contentstreaming process, as opposed to higher levels of the network 703, 788,780, 789 that are not involved, thus relieving the bandwidthrequirements of the operator's upper network layers. The ability toclose the streaming loops at the lower levels of the transport networkis an inherent characteristic of the disclosed VOD system, and it is adirect result of the process of partitioning all STBs into groups thatare contained within lower levels of the network (levels that are asclose as possible to the last mile routers and transport channels).

Continuing the example, the requesting STB 749 receives the firststreamed VOD fragment from its peer STB 740, and displays this contenton its TV 759; the following fragment of the content (if there are any)may be stored in the same STB 740, or may be stored on other STBs of thegroup; the requesting STB 749 is therefore directed to other fragmentsof the desired content by either the controlling server(s) 702 a or 702b or by a pointer that is contained within the current fragment ofcontent, which was already received.

A group may extend beyond the first routing level 730, and 739, andinclude a second (or higher) routing level 704; in this case, thestreamed VOD propagates through several layers of the operator'snetwork, but is still kept away from the operator's WAN 703 and highlevel limited bandwidth transport channels 788.

Although elements 730, 739, 704 are referred to herein as accessrouters, they are not limited to such and may also represent, and bereferred to as an Access Network, Aggregation Network, SwitchingNetwork, or any other type of network that is deployed for the purposeof spanning a plurality of target users from a centralized point ofingress/presence. Moreover, although elements 705, 701, 703 are referredto herein as VOD server, Streaming Server, or Wide Are Network, they arenot limited to such and may also represent, and be referred to as Edgerouters, Network Edge, B-RAS, Core, Network Core or any other entitiesthat constitute the elements within a network that handle contentaggregation and network core transport and management.

It is to be noted that the process of VOD storage distribution and theprocess of VOD content consumption are described as two separateprocesses for clarity purposes only, and may both happen simultaneouslyand continuously, in a non-limiting fashion.

The controlling server(s) and the initial VOD content servers may residein the operator premises 702 a and connect to the operator Wide AreNetwork 703, or may alternatively reside off-site 702 b, and connect tothe operator network via the Internet 706; this flexibility of thedisclosed VOD system is a direct result of the fact that high bandwidthand fast constrained VOD streaming processes are contained inside theSTBs groups, so that no significant bandwidth or real-time requirementsmay be put on the controlling and initial VOD storing servers. Theservers may distribute the initial VOD content to the storage endpoints(the STBs) over long times and in a non-real-time fashion, thussignificantly reducing the cost of the system, the demands on theoperator transport network, and also allowing for seamless scalabilityin number of served VOD users.

Referring to FIG. 16, in one embodiment of storing and accessing thedistributed VOD content, all VOD content is fragmented to smallfragments ranging, as a non-limiting example, from 0.03 to 10 seconds ofstreaming video memory at the controlling and initial content server(s)702 a or 702 b. At the phase of VOD content distribution to the groupsof end-user devices, the controlling server(s) direct the content insuch a way that each end-user device 741 (such as, but not limited to, aSTB, a distributed VOD device that drives a regular STB, or a PC) in thegroup receives some of the fragments 710, 711, 712, 714, 715, 716 of allof the content files that are in the VOD pool; the distribution of thefragments is done such that each VOD file's fragments are more-or-lessevenly distributed among the end-user devices, and such that every twotime-consecutive fragments of all of the VOD content files reside in twoseparate end-user devices. Each fragment stored in a long term storagebuffer 793 of an end-user device points to the location (indicated bythe end-user device within a group plus the exact fragment in its longterm storage buffer) of the consecutive fragment; this way, when a useris viewing a VOD content, it can receive the current fragment, and canalso immediately know from where and whom to request the next fragmentof the content it is now viewing. A similar system of pointers pointfrom one fragment to another in the opposite direction, so that“rewinding” capabilities are supported. The controlling server(s) hascomplete knowledge of the beginnings of each linked content list. Thiselaborated mechanism of linked lists of small VOD content fragments thatextend throughout all end-user devices assures that almost any number ofusers can simultaneously ask for the same VOD content, provided thatthey are not viewing the exact same time fragment.

A non-limiting numerical example may further clarify the principle; a 2hour movie is fragmented into 7200 one second fragments that aredistributed among all end-user devices in a group; if there are about1000 end-users in such a group, and the movie is extremely popular, thenmaybe as many as 100 viewers would like to watch it simultaneously.Since the viewers are not synchronized, there is a high probability thatat any given time that a user is requesting the popular content, thefirst fragment that resides in a certain end-user device is free to betransmitted (100 accesses of 7200 possible fragments are very unlikelyto collide). Another way of looking at this process is that at any giventime, and regardless of what content is more popular, the streamingtraffic among end-user devices is very strongly averaged on the lastmile transport channels 770, 771, 779, such that the transportinfrastructure is put to its true practical limits; this disclosedmethod of storing and accessing the VOD content is herein referred to as“distributed VOD stripping”.

In one embodiment of the fragmented distribution, not one set ofpointers is used at each fragment that points to the next fragmentwithin a group, but rather a set of several pointers that point toseveral locations of the next fragment; one pointer points to the nextfragment within the viewer group, and other pointers point to thelocations of the same content fragment stored in other groups; this waya redundancy mechanism is realized between the groups.

When the viewing end-user 741 fetches the fragments from peer end-userdevices, it may fetch more than one consecutive fragment at a time (bytraversing several pointers at once to reach several consecutivefragments); the multiple fragments 721, 723 can be stored in a streamingbuffer 799 for smooth and uninterrupted viewing.

In addition, FEC (Forward Error Correction) techniques may be used toencode several consecutive fragments, such that even if one or morefragments within a super-fragment FEC encoded chunk are missing, thestream can still be decoded with no skips or interruptions.

In one embodiment of the invention, all VOD content is fragmented at thecontrolling and initial content server(s) 702 a or 702 b into smallfragments, ranging from 0.03 to 10 seconds of streaming video memory, asa non-limiting example. At the phase of VOD content distribution to thegroups of end-user devices, the controlling server(s) directs thecontent in such a way that each end-user device 741 (such as, but notlimited to, a STB, a distributed VOD device that drives a regular STB,or a PC) in the group receives some of the fragments 710, 711, 712, 714,715, 716 of all of the content files that are in the VOD pool; thedistribution of the fragments is done such that each VOD file'sfragments are more-or-less evenly distributed among the end-userdevices; a possible fragment distribution method is disclosed asfollows: A pseudo-random series is chosen such that if ‘m’ end-userdevices 741 constitute one complete content group, then the series ispointing to each member in the group in a sequence; the resultingpointing sequence seems random, but since it was created by apseudo-random series, it is totally predictable (a non-limiting exampleof such a pseudo-random series is generated by a primitive-polynomialover Galois Field GF(2) of order ‘n’ to create a pseudo-random pointinglist of cycle 2̂n that is mapped into the ‘m’ end-user devices byperforming ‘modulo m’ on the pointing list elements, assuming 2̂n>m); thecontrolling and initial content server(s) 702 a or 702 b distributes thevideo stream fragments across all end-user devices of the group suchthat the first fragment of the stream is stored on the end-user devicepointed to by the first pointing element in the pseudo-random series(for example, the first fragment of the stream is stored at memorylocation 710 of STB 741 that happened to be pointed to by the firstelement of the pseudo-random series), the second fragment of the streamis stored on the end-user device pointed to by the second pointingelement in the pseudo-random series (for example, the second fragment ofthe stream is stored at memory location 710 of STB 749 that happened tobe pointed to by the second element of the pseudo-random series), and soon and so forth with the rest of the fragments of the stream.

It is to be noted that the pseudo-random series will eventually re-pointto STB 741 (for example), for storing a certain fragment of the streamat location 711, and then 712 and so on and so forth until all thestream's fragments are stored over all end-user devices of the group,and such that each end-user device of the group stores more or less thesame amount of stream fragments (this is assured by using apseudo-random fragment distribution series).

Two time-consecutive fragments have a high probability of being storedon different end-user devices (this is again assured by using apseudo-random fragment distribution series). After the fragments aredistributed, the process of VOD content consumption may begin; therequesting end-user device (say 741) is requesting a certain VOD contentfrom the controlling server(s) 702 a or 702 b, which afterauthenticating the identity of the requesting user (or withoutauthenticating the identity of the requesting user), sends it theinformation of the pseudo-random series used to distribute the requestedcontent. This information may be as a non-limiting example the order ofthe GF(2) field, the exact primitive-polynomial, and the starting pointof the first fragment of the desired content. This information may besent encrypted or un-encrypted to the requesting user. The user, nowequipped with the exact same pseudo-random series that was used todistribute the content fragments among the end-user devices of thegroup, has perfect knowledge of where each fragment of the streamresides (which end-user device of the group stores which fragment of thedesired VOD stream); all it has to do is request the fragments in thecorrect sequence from its peer devices.

It is to be noted that the requesting device may request severalconsecutive fragments simultaneously from the several end-user devicesthat store these fragments according to the pseudo-random series; thesefew next fragments 721, 723 may be temporarily stored in a streamingbuffer 799 in order to preserve viewing continuity. Different VODcontents may be distributed using different pseudo-random series (as anon-limiting example by changing the order of the GF(2) field, the exactprimitive-polynomial, or the starting point of the first fragment of thedesired content, or a combination of all or some of the above). Themethod of pseudo-random fragment distribution and consumption may havethe following advantages for a distributed VOD storage system.

(i) Since time-sequential fragments reside in several different end-userdevices, the requesting end-user device can use the accumulated uploadbandwidth of several devices to support high streaming bandwidths; a nonlimiting example is an ADSL line that is limited in upload bandwidth toabout 0.5-1 Mbps; in this case, the requesting end-user device maysimultaneously request the next 20 fragments, for example, which withhigh probability reside in 20 different end-user devices, and thereforethe effective streaming upload bandwidth is immediately increased from0.5-1 Mbps to 10-20 Mbps (which is capable of supporting HDTV VODstreaming for example); the latency of requesting 20 fragments, forexample, is still small for very small fragments (0.03 Seconds perfragment, which is about one frame per fragment, as a non limitingexample) and is equal to about 20×0.03=0.6 seconds (as a non-limitingexample), which is very much acceptable for VOD content delivery.

(ii) Since a VOD content may be fragmented into thousands or evenhundreds of thousands of small fragments (as non limiting examples), andsince all these fragments are pseudo-randomly distributed over allend-user devices in a group, then it is possible for any number of userswithin the group to simultaneously request to view the same VOD content,each with a different and unique time shift. This happens becauseassuming a minimal time shift between user requests, all streaminginformation is very strongly averaged between all end-user devices,effectively creating an aggregated streaming capability equal to thetotal aggregated upload capacity of all end-user devices, which scalesas the number of devices grows, and all this with only one copy per VODcontent. In other words, there is no need to store several copies of thecontent to allow multiple streaming events per content.

(iii) Different VOD contents may be distributed using differentpseudo-random sequences, which allows many users to see many differentVOD contents simultaneously, while assuring that all end-user devicescontribute to the streaming effort, and eliminating the possibility ofmomentary congestion in streaming requests from any one end-user device;this is assured by the fact that different pseudo-random sequences havelow correlation between themselves.

(iv) Since all viewing users use pseudo-random sequences to accuratelyknow from which end-user devices to request the fragments of a stream,there is no need for a central point of coordination and locationservices; this fact allows the system to use very small fragments, whichotherwise might have resulted in impossible management load for acentral coordination server; in a non-limiting example of a group of1000 end-users, and using 0.03 second fragments, assuming all usersconsume a VOD stream results in 1000*1/0.03=33,000 management requestsfrom a central server per second, per group. All this is avoided by thedisclosed method.

(v) Since the end-user can use the pseudo-random sequence to predict theexact location of all fragments of a VOD stream, it is very easy to jumpforward or backward in the steam by simply calculating the location ofthe wanted time-shifted fragment. For example, if 0.03 second fragmentsare used, and the user wants to move 5 minutes forward in the movie, theend-user device simply needs to calculate where the fragment that is5*60/0.03=10,000 fragments away is located, and continue from there. Atime stamp per fragment may be used to help locate the wantedtime-shifted fragment within the calculated specific end-user device.

(vi) Optionally, if only authenticated users can receive thepseudo-random sequence generation parameters of a VOD stream, thisconstitutes for protection against unauthorized access to the VODcontent. A user that does not have the pseudo-random sequence generationparameter of a certain VOD content, cannot know where to look for thefragments of this content.

It is to be noted that the disclosed advantages in using pseudo-randomfragment distribution and consumption may also be applied to thein-fragment pointer-based system described above, provided that thepointers within fragments point to other fragments in a way that mimicspseudo-random behavior.

It is also noted that non-pseudo-random sequences (linear sequences forexample) may be used as well, but may result in a less efficientoperation of the system.

The following is a non limiting example of a method for networkdiscovery. In one embodiment of an operator network deployment of thedistributed VOD system, the groups of end-user devices can easily bededuced from the construction of the network; but when such informationis not available (for example when the system is installed withoutcooperation with the network operator), the following method may beused. Every end-user device in the network sends a packet of data to allother users, and measures the time it takes for all responses; the userthen sends this information to the controlling server(s) forregistration, which in turn use it to determine the minimal routinggroups.

It is to be noted that although the partitioning of STBs into groups wasdisclosed as a process that is aimed at creating groups of STBs withminimal routing paths, partitioning is not limited to thisimplementation, and there are other methods and ways to partition theSTBs (or any other end-user devices). A non limiting example of agrouping strategy is grouping by content types; in this case, theend-user devices are grouped such that every group represents a specialcontent interest group (for example old movies group and Sci-Fi group ina non limiting fashion), such that content transport between the group'smembers has a high probability of answering the viewing preferences ofthe group. There is a tradeoff between the minimum routing criterion andother criterions such as interest group as an example, and the operatorhas the flexibility to decide how to balance his grouping selectionmethod. Other partitioning strategies may be sought, like time ofviewing, or others in a non-limiting fashion.

The following embodiment discloses a method of distributing the storageof broadcasting channels content to end user devices that are grouped inminimal routing clusters. The distributed content is then streamedwithin the routing groups from the group of peers to the end targetpeer, and by that increases the duration of channel recording.

In one embodiment, predetermined groups of inter-connected STB devicesare formed. Referring to FIG. 15, STBs 740, 741, and 749 may form such agroup. The partitioning of all STBs into groups is determined in such away that every STB of a certain group is connected to all other STBs inthis group via a minimal routing path, and such that all routing pathsbetween the group's STBs are contained by a single access router 730 ora router that controls a group of access routers 704. The process ofpartitioning may be managed by the controlling server(s) 702 a or 702 b.

In this example, the operator broadcast channels are received by acentral regional receiver 700 and are then delivered to a streamingserver 701 that streams this content to any requesting end user STB 740,741, 749, and 748. In addition to the directly streamed broadcastchannels, a process of simultaneously recording all of the broadcastchannels into the long-term storage buffers inside all the STBs in agroup 740, 741, 749 may occur. When a specific user decides to drop fromdirect broadcast view into a delayed and/or recorded broadcast view, itis directed by the controlling server(s) 702 a or 702 b to start viewinga recorded stream from the STBs that happen to hold the desired timefragment of the viewed delayed broadcast. The simultaneous recordingprocess is managed by the controlling server(s) 702 a or 702 b, suchthat broadcast channel streams arriving from the streaming server 701are directed for distributed recording among all STBs of a group, andsuch that all groups of STBs contain their own copy of the broadcastchannels. Optionally, the controlling server(s) 702 a or 702 b keeptrack of which channel is stored where.

Optionally, a specific period of recording is determined for eachrecorded broadcast channel, such that the distributed recording of eachchannel is wrapped around after this period of time.

As a non limiting example, a group of STBs contain about 1000 STBdevices, with 1 Gbyte of storage memory per STB. Assuming that about 20broadcast channels are recorded, an average of about 50 hours of channelhistory can be recorded for all 20 broadcast channels. This volume ofrecording is much larger than anything that can usually be recordedindependently by a single recording-enabled STB. Each STB may containseveral channels, one channel, fragments of a channel, fragments from aplurality of channels, fragments of all channels, or any othercombination as long as all the required broadcast channels arecollaboratively contained inside the long term storage buffers of allSTBs of a group.

It is to be noted that by using small fragments for distributiverecording of broadcasted channels (0.03 seconds per fragment as anon-limiting example), it is possible to mimic multicasting broadcastoperation as follows. All broadcast channels are recorded as disclosedabove; a user that wants to see a specific broadcast channel asks thecontrolling server(s) 702 a or 702 b for a micro time-shift slot. Theserver allocates a slot for the user that starts viewing the channelwith a time-shift that is equal to the slot allocation. Each slot is onefragment in duration (say 0.03 seconds), so that all users viewing acertain channel are allocated different slots, and since differentfragments (slots) are contained in different end-user devices, thenumber of end-user devices that participate in the streaming is at leastequal to the number of viewers of the channel per group, and cantherefore easily share the load of streaming the broadcast channel toall requesters. Since the fragments are small, the resulting microtime-shift of the viewers is kept at minimum (typically 1-3 seconds), sothat the viewing experience is similar to actual viewing of a real-timemulticast stream, but without the need for actual multicastingduplication from the source stream.

In an embodiment of the invention, a stable broadcast tree topology isused for content fragments distribution. In one embodiment of theinvention, stable broadcast tree topology and STB node grouping intominimal routing groups, facilitate the creation of a peer-to-peerbroadcasting system that reduces the streaming requirements from acentral streaming server, and puts the heavy load of simultaneouslybroadcasting to virtually any number of users into the hands of end nodedevices.

Referring to FIG. 18, in a stable broadcasting tree topology 800, onlythe end nodes (leafs) of the trees 743, 744, 745, 746 and 747, 749, 810,811 are streaming the content to the requesting (viewing) users,illustrated in FIG. 18 by 742, 747, and 748. All other nodes 740, 741,742, and 813, 748, 812 that are not leafs in the broadcasting trees 800are just being used as relay nodes that facilitate the exponentialcreation of multiple broadcasting sources.

Since each leaf node in the broadcasting tree can serve at least twousers, it is guaranteed that all participating nodes in the trees can beserved. For example, without limiting the embodiments, a broadcastingtree having n layers (the illustrated tree 800 has three layers) willhave a maximum of (2̂n)−1 nodes and 2̂(n−1) leafs. Since each leaf maysupport 2 viewers, the tree may support a maximum of 2*2̂(n−1)=2̂n users;but since there are only 2̂n−1 users (nodes), there will always be onemore stream than users. Therefore, the leafs can support the entiretree.

In the illustrated stable broadcast trees 800, even though user 742 canview the stream that is directly provided by user 740, it is accordingto the stable tree topology that user 742 just relays the stream tousers 745 and 746, and only the leaf user 746 redirects the stream backto user 742 for viewing. This gives the tree an inherent stability,since if now user 742 decides to stop viewing the stream, it will stilldirect the stream to the upper nodes in the tree. Similarly, user 748 isa part of a neighboring streaming tree, and as a stable tree node, thisuser is acting as a relay to the stream that comes from user 813 to theupper layer users 747 and 749, but it is not viewing this stream, but israther viewing another stream that is transmitted to it by the leaf node743 of the first tree; this way, when user 748 loses interest in viewingthe stream that comes from user 743, it has no effect over theneighboring tree stability, since the relaying process was completelydecoupled from the viewing process.

In one embodiment of the invention, users are partitioned into minimalrouting groups. Referring again to FIG. 15, in one embodiment,predetermined groups of inter-connected STBs devices are formed; STBs740, 741, and 749 form such a group (three such STBs are illustrated,but there may be, for example, 100-1000 STBs in each group). Thepartitioning of all STBs into groups is determined in such a way thatevery STB of a certain group is connected to all other STBs in thisgroup via a minimal routing path, and typically such that all routingpaths between the group's STBs are contained by a single access router730 or a router that controls a group of access routers 704. Optionally,the process of partitioning may be managed by the controlling server(s)702 a or 702 b.

The peer-to-peer broadcasting tree 800 formed inside such groups of STBs740, 741, 749, such that each STB is a node of the tree. Since thenode's connectivity is to other nodes within a group, all tree branchesthat transport the broadcasts are contained within the group, and enjoythe low latency and high bandwidth associated with these transportchannels 770, 771, and 779.

A group may extend beyond the first routing level 730, 739, and includea second (or higher) routing level 704; in this case, the streamedpeer-to-peer broadcast channels propagate through several layers of theoperator's network, but they are still kept away from the operator's WAN703 and high level limited bandwidth transport channels 788.

After the STBs are partitioned into groups, the controlling server(s)702 a or 702 b decide how to construct the peer-to-peer broadcastingtree, such that the initial broadcasting stream that is received by thestreaming server 701 is directed by the controlling server(s) to thefirst broadcasting node in a group (STB 740, for example, which becomesthe head node), and such that the first node (740) serves two additionalnodes and so on until the entire broadcasting tree is mapped into allparticipating STBs.

The fact that the entire broadcast tree is maintained by the STBs in thegroup lowers the costs and requirements from the centralized streamingserver 701, which instead of streaming the content to all end points atthe same time, now only needs to stream content to several tree startingpoints; the rest is done by the tree nodes that are the STBs. It is alsoto be noted that this peer-to-peer grouped broadcasting allows forseamless scalability, since new STB users need only register and becomea part of the broadcast tree.

It is also to be noted that even though STB 741 and all other STBs aredepicted as being directly connected to a display device, and areperforming the distributed broadcasting themselves, implementation isnot limited to this option, and other options exist, for example theoption of separating the distributed broadcasting section from the STB,such that the STB (or any computing device, such as, but not limited to,a PC) has access to this distributed broadcasting function that iscontained in a separate enclosure.

It is to be noted that any STB can be implemented in its entirety by anycomputing device, such as, but not limited to a PC. It is also to benoted that another possible embodiment of an STB is a home or officegateway that implements the distributed broadcasting functionality; thegateway may be connected to the operator's line on one side, and to theuser's interactive device(s) (that may be, but is not limited to, aregular STB, a PC, or an audio system of some sort) on the other side;in this case, the gateway assumes all the functionalities that areassociated and disclosed in conjunction with the described STB 741device, such that throughout this patent application any occurrence ofthe word STB or end-user-device also includes the possibility of a homeand/or office gateway.

FIGS. 19A and 19B are a non limiting example of two clusters havingdifferent sizes. Each peer client associated with the first cluster hasapproximately S1 storage volume allocated for storing content fragments.Each peer client associated with the second cluster has approximately S2storage volume allocated for storing content fragments.

A plurality of unique contents are stored in the first cluster and arefragmented; each peer client belonging to a certain type stores acertain portion of all the fragments; the aggregated volume of allcontents stored in the first cluster is approximately equal to S1 timesN1. A plurality of unique contents are stored in the second cluster andare fragmented; each peer client belonging to a certain type stores acertain portion of all the fragments; the aggregated volume of allcontents stored in the second cluster is approximately equal to S2 timesN2.

Any peer client associated with the first cluster can assemble anyunique content that is stored in the first cluster and any uniquecontent that is stored in the second cluster. Any peer client associatedwith the second cluster can assemble any unique content that is storedin the second cluster and any unique content that is stored in the firstcluster.

All of the contents to be stored in the first and second clusters aresorted by expected or measured popularity, and the most popular contentsthat fit into an aggregated volume of S1 times N1 are uniquelydistributed for storage in the first cluster, and the rest of thecontents that fit into an aggregated volume of S2 times N2 are uniquelydistributed for storage in the second cluster.

The ratio of (S1 times N1) to (S2 times N2) is pre-selected as tosupport a ratio of (S1 times N1) to (S2 times N2) between the volume ofunique contents stored in the first cluster and the volume of uniquecontents stored in the second cluster. The first cluster hasapproximately K1 peer clients per approximately each type and the secondcluster has approximately K2 peer clients per approximately each type.K1 and K2 are selected such that the ratio of (K1 times N1) to (K2 timesN2) is approximately equal to the expected or measured ratio of allaggregated streaming throughput averagely generated by peer clientsretrieving contents stored in the first cluster to the aggregatedstreaming throughput averagely generated by peer clients retrievingcontents stored in the second cluster.

FIG. 21 illustrates one embodiment wherein a user commands a standardSTB to play content. The STB contacts an assembling peer client ofsoftware component, and requests the content. Optionally, the request isvia a standard RTSP/TCP protocol. FIG. 21 illustrates the assemblingpeer client or software component assembling the requested content, andstreaming it to the STB via the RTP/UDP streaming protocol.

Referring back to the drawings, FIG. 23 illustrates embodimentscomprising the following steps: In step 1020, receiving a first contenthaving a size greater than 100 MB to be stored in a distributed storagesystem comprising a plurality of storage-and-computing elements; In step1022, fragmenting the first content into a plurality of first contentfragments, each sized no more than 64 KB; In step 1024, associating eachof the first content fragments with at least one storage element type,selected from a first set of storage element types that includes atleast 20 storage element types, according to a first fragment-to-typeassociation information; And in step 1026, distributing the firstcontent fragments to the storage-and-computing elements according totype-to-physical-address association information.

Optionally, the received content having a size greater than 100 MB is avideo streaming content that comprises at least two data files. It is tobe understood that this embodiment refers to the full original size ofthe streaming content, whether or not it is divided into one or moredata files. e.g. for the purpose of this embodiment, 10 files of 10 MBeach which belong to the same streaming content are regarded as one fileof 100 MB. In one embodiment, the maximum size of the aggregatedreceived content is a function of the available storage aggregated spacein the storage-and-computing elements divided by the numberstorage-and-computing element types. Alternatively, the extra data thatcannot be stored in the system is stored in an additional cluster thatis associated with additional storage-and-computing element types.

Optionally, the fragments of all contents are associated with storageelement types according to the same fragment-to-type associationinformation. Alternatively, the fragments of different contents areassociated with storage element types according to differentfragment-to-type association information.

Optionally, the embodiments further comprise the steps 1028 of receivinga second content, fragmenting the second content, associating the secondcontent fragments with the storage element types according to the firstfragment-to-type association information, and distributing the secondcontent fragments to the plurality of storage-and-computing elementsaccording to the type-to-physical-address association information.

Optionally, the embodiments further comprise the steps of receiving asecond content, fragmenting the second content, associating the secondcontent fragments with the storage element types according to a secondfragment-to-type association information, and distributing the secondcontent fragments to the plurality of storage-and-computing elementsaccording to the type-to-physical-address association information.

Optionally, the embodiments further comprise the steps of receiving asecond content, fragmenting the second content, associating the secondcontent fragments with a second set of storage element types accordingto a second fragment-to-type association information; and distributingthe second content fragments to other storage-and-computing elementsaccording to a second type-to-physical-address association information.

Optionally, the embodiments further comprise the step of determining theminimal number of storage-and-computing elements required to completelystore a predetermined amount of data.

Referring back to the drawings, FIG. 27 illustrates embodiments whereindetermining the minimal number of storage-and-computing elementscomprises the steps of:

In step 1062, calculating the required number of storage element types(N) in the distributed storage system as the ceiling of (A/MAS), whereinA is the total aggregated size of the contents to be stored in thedistributed storage system, including overhead, and MAS is the minimalstorage allocation required from a participating storage-and-computingelement;

In step 1064, registering M available storage-and-computing elements inthe distributed storage system, wherein M>=N, and thestorage-and-computing elements are accessed via Internet protocol;

And in step 1066, associating each of the M storage-and-computingelements with at least one of the N storage element types.

Optionally, predefined storage element types are associated with morestorage-and-computing elements in relation to the other storage elementtypes. These predefined storage element types may hold specificinformation such as key frames, highly consumed content sections, etc.

Referring back to the drawings, FIG. 28 illustrates embodiments whereindetermining the minimal number of storage-and-computing elementscomprises the steps of:

In step 1068, for each content to be stored, determining the minimalnumber of storage elements types (N) required to completely store thecontent, without any duplication of data between the N storage elementtypes, and the minimal storage to be allocated to each participatingstorage-and-computing element (MAS), such that (N*MAS) is at least thesize of the content to be stored;

In step 1070, registering M available storage-and-computing elements inthe distributed storage system, wherein M>=N;

And in step 1072, associating each of the M storage-and-computingelements with one of the N storage element types.

Referring back to the drawings, FIG. 24 illustrates embodimentscomprising the following steps: In step 1030, receiving a first contenthaving a size greater than 100 MB to be stored in a distributed storagesystem; In step 1032, setting a number of groups according to therequired storage redundancy; In step 1034, registering a plurality ofstorage-and-computing elements that are accessed using Internetprotocol; In step 1036, associating each storage-and-computing elementwith one of the groups, such that the aggregate allocated storage of thestorage-and-computing elements associated with each group comprises thetotal content to be stored; In step 1038, fragmenting the first contentinto a plurality of first content fragments, each sized no more than 128KB; And in step 1040, distributing the first content fragments betweenthe storage-and-computing elements associated with each group accordingto a distribution function associated with each group.

Optionally, the embodiments further comprise receiving a second contenthaving a size greater than 100 MB; fragmenting the second content into aplurality of second content fragments, each sized no more than 128 KB;and distributing the second content fragments between thestorage-and-computing elements associated with each group according to adistribution function associated with each group.

Referring back to the drawings, FIG. 25 illustrates embodimentscomprising the following steps: In step 1042, registering a plurality ofstorage-and-computing elements that are accessed via Internet protocol;In step 1044, associating the plurality of storage-and-computingelements with a plurality of storage element types; In step 1046,receiving a streaming content having a size greater than a predefinedsize; In step 1048, fragmenting the streaming content into a pluralityof small content fragments; And in step 1050, distributing the contentfragments between the storage-and-computing elements according to adistribution function.

Optionally, the distribution function features a low autocorrelation anda low correlation with other distribution functions used by thedistributed storage system. In general, as the distribution function'sautocorrelation and correlation with other distribution functions arelower, the distributed storage system may provide better performances.

Optionally, the distribution function distributes the content fragmentsapproximately homogeneously between the relevant storage-and-computingelements.

Optionally, the selected distribution function distributes the resultsamong all of the storage-and-computing elements. Alternatively, theselected distribution function distributes the results among apredefined set of the storage-and-computing elements.

Optionally, the distribution function is a pseudo random sequence with aprimitive polynomial.

An example for a linear distribution function is mapping fragment numberto storage-and-computing elements number modulo N wherein N is thenumber of participating storage-and-computing elements, i.e.FragmentNumber=>modulo(N, FragmentNumber

Optionally, the embodiments further comprise the step of receiving ordetermining the distribution function prior to the step of distributingthe content fragments.

Optionally, the distribution function comprises a translation mechanismbetween the various content fragments and their associatedstorage-and-computing element IP addresses or IP addresses and portnumbers. Optionally, the translation mechanism comprises at least one IPaddress for each content fragment.

Optionally, the embodiments further comprise the step of setting aminimal required storage space of each of the storage-and-computingelements, whereby each of the storage-and-computing elements has atleast the minimal amount of storage available locally;

Optionally, the number of content fragments distributed to each of thestorage-and-computing elements is proportional to its available storagespace or to its bandwidth.

Optionally, the embodiments further comprise the steps 1052 of:receiving an additional streaming content; fragmenting the additionalstreaming content into a plurality of small content fragments; anddistributing the additional streaming content fragments between thestorage-and-computing elements according to the distribution function.

For example, a distributed storage system may include 10storage-and-computing elements having 1 GB storage space each, having atotal aggregated storage of 10 GB. In order to store 3 contents having asize of 3 GB each, (i) each content is fragmented into a plurality ofcontent fragments, (ii) the content fragments are distributed betweenthe 10 storage-and-computing elements, using a fragment distributionfunction, and (iii) the content fragments are retrieved by using afragment retrieving function (which is derived from the fragmentdistribution function). In the case where the storage space of eachstorage-and-computing element is in the order of the size of eachcontent to be stored, this embodiment results in a highly efficientusage of the plurality of storage-and-computing elements. Thisembodiment makes it possible to store large files usingstorage-and-computing elements having relatively small storage spaces.In one embodiment, users over the Internet allocate a portion of theirhard disk for a distributed storage that stores a large amount ofcontent. In another embodiment, a corporate allocates storage portionsin a plurality of computers over its Intranet for a distributed storagethat stores a large amount of content.

Referring back to the drawings, FIG. 26 illustrates embodimentscomprising the following steps:

In step 1054, receiving an identifier of a content to be retrieved; thecontent comprising a plurality of content fragments distributed among aplurality of storage-and-computing elements; Optionally, the identifierof the content is received from a user interface;

In step 1056, receiving fragment-to-type association information andtype-to-physical-address association information associated with thecontent to be retrieved;

In step 1058, executing the following steps for each content fragment:determining the storage element type that stores the content fragment,using the fragment-to-type association information; determining a firststorage-and-computing element physical address from which to retrievethe content fragment, using the type-to-physical-address associationinformation; and retrieving the content fragment from thestorage-and-computing element located at the first physical address;

And in step 1060, for each content fragment whose receiving failed,determining a second storage-and-computing element physical address fromwhich to retrieve the content fragment, using thetype-to-physical-address association information; and retrieving thecontent fragment from the storage-and-computing element located at thesecond physical address.

The aforementioned process may be repeated with otherstorage-and-computing element physical addresses associated with thestorage element type until the fragment is received.

Optionally, the step of determining the physical address from which toretrieve the content fragment is performed on a random basis. In oneembodiment of the invention, the step of determining the physicaladdress from the available physical addresses is performed randomly,pseudo randomly, according to at least one predefined criterion, and/oraccording to another non-consistent method. The selection isnon-consistent in order to distribute the load between the differentstorage-and-computing elements associated with the same storage elementtype.

Referring back to the drawings, FIG. 22 illustrates embodimentscomprising the following steps:

In step 1002, receiving an identifier of a streaming content to beretrieved; the streaming content comprising a plurality of contentfragments distributed among a plurality of storage-and-computingelements;

In step 1004, receiving fragment-to-type association information andtype-to-physical-address association information associated with thestreaming content to be retrieved;

In step 1006, determining the minimal streaming buffer size that shouldbe retrieved in order to play the streaming content;

In step 1008, executing the following steps for each content fragment tobe retrieved: determining the storage element type that stores thecontent fragment, using the fragment-to-type association information;determining a first storage-and-computing element physical address fromwhich to retrieve the content fragment, using thetype-to-physical-address association information; and retrieving thecontent fragment from the storage-and-computing element located at thefirst physical address;

And in step 1014, placing the retrieved fragments in the propersequential order into the streaming buffer.

Optionally, the step of receiving the identifier of the streamingcontent to be retrieved (1002) further comprises receiving a positionwithin the content to start playing from; and the process of retrievingthe content fragments is starting from the content fragment number thatis associated with the received position.

Optionally, the step of receiving the identifier of the streamingcontent to be retrieved (1002) further comprises receiving a contentfragment number to start playing from; and the process of retrieving thecontent fragments is starting from that content fragment number.

Optionally, step 1006 further comprises the step of calculating thenumber of content fragments comprised within the minimal streamingbuffer size by dividing the streaming buffer size by the size of acontent fragment. For example, in order to fill a minimum streamingbuffer of 1.5 Mbit in 5 seconds before starting to play a 1.5 MbpsMPEG-4 standard definition stream using 8 Kbyte fragments, thecalculation is: 1.5 Mbit times 5 seconds equals 7.5 Mbits, which equal0.9375 MBytes. And therefore the amount of fragments for fast retrievalare 0.9375/0.008=118 fragments.

Optional step 1012 further illustrates, for each content fragment whoseretrieving failed, determining a second storage-and-computing elementphysical address from which to retrieve the content fragment, using thetype-to-physical-address association information; and retrieving thecontent fragment from the storage-and-computing element located at thesecond physical address.

Optionally, the method of retrieving the content fragment is selectedfrom the group of: partial overlapping retrieval, parallel retrieval,pseudo random selection of the content fragments to be retrieved, and acombination thereof. For example, when utilizing a downlink bandwidth ofapproximately 5 Mbps for streaming a stream of approximately 1.5 Mbps,approximately 30 concurrent fragment streams, each of approximately 100Kbps, may be used.

Optionally, in step 1010, the step of retrieving the content fragmentscomprises retrieving approximately the maximum amount of contentfragments made possible by the available downlink bandwidth.

Optionally, the step of determining the storage-and-computing elementphysical address from which to retrieve the content fragment isperformed such as to reduce at least one of the following: operationalcost, setup cost, transit fees between ISP operators, networkcongestion, network congestion at the network aggregation levels.

Optionally, the step of determining the storage-and-computing elementphysical address from which to retrieve the content fragment isperformed such as to reduce the average number of hops in the networkwhen retrieving content fragments by all of the storage-and-computingelements.

Optionally, the embodiments further comprise the step of accessing anetwork topology map prior to the step of determining thestorage-and-computing element physical addresses and utilizing thenetwork topology map when determining the storage-and-computing elementphysical addresses.

Optionally, the network topology map is calculated using multi peerprobing. And optionally, the multi peer probing comprises the steps of:a major amount of the storage-and-computing elements executingTraceroutes to at least one predefined router IP address, and reporting,to a predefined server, about the routers found on the path to thepredefined router IP address; and the predefined server locatingintersections between the reported paths and according to that derivingthe network topology.

Optionally, the embodiments further comprise on going retrieving ofcontent fragments, wherein the rate of the on going retrieving isdetermined according to the streaming buffer consumption rate.

Optionally, the embodiments further comprise the step 1016 of playingthe retrieved streaming content from the streaming buffer. Optionally,the streaming buffer comprises two statuses—content fragments to beplayed (already retrieved and stored in the buffer) and contentfragments that are in the process of being retrieved; and a tail pointerpoints to the position from which the streaming content is presentlyplayed; Optionally, the streaming buffer is a cyclic streaming buffer.The content fragments to be played are content fragments that werealready retrieved and are stored in the buffer.

Optionally, the embodiments further comprise retrieving the contentfragments that are in the process of being retrieved and fail to beretrieved from an alternative storage-and-computing element, by usingthe type-to-physical-address association information;

Optionally, the embodiments further comprise retrieving contentfragments that fail to be retrieved approximately simultaneously in theorder of their closeness to the tail pointer. Such that if severalcontent fragments fail to be retrieved approximately simultaneously, thecontent fragment that is closest to the tail pointer will be retrievedfirst and the content fragments that is second closest to the tailpointer will be retrieved second.

Optionally, the embodiments further comprise the step 1018 of playingthe retrieved streaming content from the streaming buffer sequentiallyfrom the tail pointer.

Optionally, the streaming buffer further stores a portion of alreadyplayed streaming content for convenient backward jump.

In one embodiment, a distributed storage and retrieval system comprisesa plurality of storage-and-computing elements, eachstorage-and-computing element stores a plurality of pushed contentfragments and is able to retrieve other pushed content fragments from atleast five other storage-and-computing elements using Internet protocol;the available uplink bandwidth of an average storage-and-computingelement (‘R’ expressed in Kbps) is smaller than a third of the averagestreaming bit rate; and wherein no more than ‘N’ storage-and-computingelements, in no later than ‘T’ seconds from request, are able to playstreaming contents, wherein T is shorter than (1000/R) or alternatively200/R, wherein N is proportional to the available aggregated uplinkbandwidth of the storage-and-computing elements divided by an averagestreaming content bit rate.

Optionally, the plurality of the pushed content fragments aredistributed to the storage-and-computing elements according to adistribution function selected from the group of: hash functions, pseudorandom sequences, pointers, table based distribution mechanisms, andlinear distribution functions.

Optionally, each storage-and-computing element is associated with astorage element type, and the number of storage-and-computing elementsis equal to the number of the storage element types, and the pluralityof storage-and-computing elements are spanned by one network node, andthe network node is selected from the group of: DSLAM, B-RAS, networkaggregation node, Edge router, central office node, Network Edge router,Network segment, or a combination thereof.

Optionally, the plurality of the pushed content fragments aredistributed according to a distribution function and the distributionfunction features a low autocorrelation and a low correlation with otherdistribution functions used by the distributed storage and retrievalsystem.

Optionally, the plurality of the pushed content fragments aredistributed approximately homogeneously between the relevantstorage-and-computing elements.

Optionally, the plurality of the pushed content fragments aredistributed according to a pseudo random distribution function.

Numeric examples of the above parameters include: (i) R approximatelyequals 20 Kbps, the stream rate is approximately 1.5 Mbps, the systemcomprises at least 75 storage-and-computing element types, and T is lessthan 2 seconds; (ii) R approximately equals 100 Kbps, the stream rate isapproximately 1.5 Mbps, the system comprises at least 15storage-and-computing element types, and T is less than 10 seconds; and(iii) R approximately equals 300 Kbps, the stream rate is approximately12 Mbps, the system comprises at least 40 storage-and-computing elementtypes, and T is less than 3.3 seconds

Optionally, R is calculated by dividing the total available uploadbandwidth of the storage-and-computing elements by the number of thestorage-and-computing elements. Optionally, R is between 1/10 and 1/1000of the average streaming content bit rate.

Optionally, the total available downlink bandwidth of thestorage-and-computing elements is at least three times greater than thetotal available uplink bandwidth of the storage-and-computing elements.

In one embodiment, only a portion of the uplink and/or downlinkbandwidth is available for use by the distributed storage and retrievalsystem. In that case, the available uplink/downlink bandwidth of anaverage storage-and-computing element is calculated according to theportion of the uplink/downlink bandwidth that is available for use bythe distributed storage and retrieval system.

In one embodiment, a system comprises a plurality of interconnectedlayer-3 IP routers; each of the layer-3 IP routers spans a plurality ofpeer nodes; each peer node is associated with one storage element type,whereby the system comprises ‘x’ storage element types and each peernode pre-stores about 1/x of the contents pre-stored by the peer nodesassociated with the storage element types; the peer nodes assemblestreaming contents by retrieving fragments stored in peer nodesassociated with various storage element types; wherein the greater theamount of peer nodes spanned by each layer-3 IP router, the less trafficthere is between layer-3 IP routers; and wherein no peer node isrequired to change its pre-stored content during the process of addingnew peer nodes to the system.

Optionally, each peer node first attempts to retrieve fragments fromother peer nodes spanned by its layer-3 IP router, and for each peernode that is not available or congested, a peer node spanned by anotherlayer-3 IP router is selected.

In one embodiment, a system comprises a plurality of interconnectedlayer-3 IP routers; each of the layer-3 IP routers spans a predefinednumber ‘x’ of peer nodes; each peer node pre-stores approximately 1/x ofthe contents pre-stored in the peer nodes spanned by the same layer-3 IProuter; the peer nodes assemble streaming contents stored in the peernodes spanned by the layer-3 IP routers by retrieving fragments fromneighboring peer nodes; wherein the greater the amount of peer nodesspanned by each layer-3 IP router, the less traffic there is betweenlayer-3 IP routers; and wherein no peer node is required to change itspre-stored content during the process of adding new peer nodes to thesystem.

The term “plurality of interconnected layer-3 IP routers” as used in theclaims includes a case wherein every two layer-3 IP routers have adirect or indirect connecting path between them.

Optionally, each streaming content stored in the system is between 100MB and 8 GB, and between 500 and 20,000 different streaming contents arestored in the system. Optionally, x is between 50 and 2000, and eachpeer node stores between 200 MB and 10 GB of content.

Optionally, the aggregated streaming content consumption rate by thepeer nodes is roughly two orders of magnitude larger than the aggregatedbackbone traffic when the layer-3 IP routers span between 10,000 and1,000,000 peer nodes.

Optionally, the streaming content is playable within 5 seconds of beingrequested.

In one embodiment, a peer-to-peer system comprises: (i) a first group ofpeer clients able to communicate with each other using Internet protocoland all comprising roughly similar storage and communicationcharacteristics;

(ii) a second group of peer clients storing a plurality of small contentfragments, whereby the second group of peer clients is a sub group ofthe first group of peer clients and the second group is notsignificantly smaller than the first group; and

(iii) a third group of peer clients, capable of retrieving contentfragments from the second group of peer clients and assembling theretrieved content fragments to streaming content; the third group ofpeer clients is a sub group of the first group of peer clients, and thesize of the third group of peer clients is proportional to the averageavailable aggregated uplink divided by an average streaming content bitrate;

wherein the backbone traffic associated with the peer-to-peer system issignificantly smaller than the aggregated streaming content consumptionrate by the peer nodes of the peer-to-peer system

Optionally, each of the peer clients of the second group of peer clientshas a storage space ranging between 64 KB and 20 GB. Optionally, thesize of each small content fragment is between 1 KB and 32 KB.

Optionally, the plurality of the small content fragments are distributedamong the second group of peer clients using a distribution functionselected from the group of: hash functions, pseudo random sequences,pointers, table based distribution mechanisms, and linear distributionfunctions. Optionally, the small content fragments are distributedapproximately homogeneously between the second group of peer clients.

Optionally, the plurality of the small content fragments are distributedamong the second group of peer clients using a pseudo randomdistribution function having a low autocorrelation and a low correlationwith other pseudo random distribution functions used by the peer-to-peersystem.

Optionally, each peer client of the third group of peer clients is ableto assemble the streaming content within ‘T’ seconds from requesting it,wherein T is shorter than (1000/R) and R is the average uplink bandwidthof a peer client belonging to the second group of peer clients(expressed in Kbps).

Optionally, the available uplink bandwidth of an average peer client issmaller than a third of the average streaming content bit rate.

Optionally, the volume of the small content fragments stored in eachpeer client and the volume of an average streaming content stored in theP2P system are roughly of a similar order of magnitude.

Optionally, the volume of the small content fragments stored in eachpeer client ranges between 100 KB and 20 GB. Optionally, the peerclients of the second group comprise FLASH memory for storing the smallcontent fragments.

Referring back to the drawings, FIG. 29 illustrates embodimentscomprising the following steps:

In step 1074, setting a total aggregated size (A) of all contents to bestored in a cluster that comprises a plurality of storage-and-computingelements, each storage-and-computing element comprising a minimalavailable storage (MAS) and communicating using Internet protocol;

It is to be understood that the total aggregated size (A) of allcontents to be stored includes any overhead as a result of fragmentingthe content or any other action in any of the embodiments of theinvention. If a storage-and-computing element does not have the minimalavailable storage, it is not considered as an availablestorage-and-computing element. Optionally, each storage-and-computingelement reports its available storage.

In step 1076, determining a number of storage element types (N), whereinN>=20; Optionally, all storage-and-computing elements associated withthe same storage element type comprise the same content fragments. Inone embodiment, the number of required storage element types (N) iscalculated by a ceiling function of (A/MAS).

In step 1078, registering M available storage-and-computing elements,wherein M>=N; Optionally, the embodiments further comprise the step 1090of receiving a network topology map that describes the connectivitypaths between the M available storage-and-computing elements.

In step 1080, associating each of the M storage-and-computing elementswith at least one of the N storage element types, whereby the number ofstorage-and-computing elements associated with each storage element typeis approximately the same; Optionally, predefined storage element typeshave more storage-and-computing elements. The predefined storage elementtypes may hold specific information such as key frames, highly consumedcontent sections, etc. For example, a cluster of 100,000storage-and-computing elements with an average of 100storage-and-computing elements per type includes approximately 1000storage element types.

In step 1082, receiving a content having a size greater than apredefined size to be stored in the distributed storage system;Optionally, the predefined size is a function of the available storagespace in each of the storage-and-computing elements.

In step 1084, fragmenting the content into a plurality of contentfragments, each sized no more than 64 KB;

In step 1086, associating each of the content fragments with at leastone storage element type, according to a fragment-to-type associationinformation;

And in step 1088, distributing the content fragments to thestorage-and-computing elements according to type-to-physical-addressassociation information.

Optionally, the minimal available storage of each of thestorage-and-computing elements may be dynamically changed within apredefined range.

Referring back to the drawings, FIG. 30 illustrates embodimentscomprising the following steps: In step 1092, introducing a newstorage-and-computing element into a distributed storage system at aspecific IP address, wherein the distributed storage system comprises aplurality of storage-and-computing elements, and eachstorage-and-computing element stores a plurality of content fragmentsand is able to retrieve other stored content fragments from otherstorage-and-computing elements using Internet protocol; In step 1094,determining an optimization criterion for assigning a storage elementtype to the new storage-and-computing element; And in step 1096,assigning the new storage-and-computing element a storage element typesuch that the optimization criterion is minimized.

Optionally, the optimization criterion for assigning the storage elementtype to the new storage-and-computing element reduces the variance ofthe number of storage-and-computing elements per storage element typesover the entire storage element types space.

Optionally, the optimization criterion for assigning the storage elementtype to the new storage-and-computing element reduces at least one ofthe following: operational cost, setup cost, transit fees between ISPoperators, network congestion, and network congestion at the networkaggregation levels.

Optionally, the optimization criterion for assigning the storage elementtype to the new storage-and-computing element reduces the average numberof hops in the network while the storage-and-computing elements retrievedata. And optionally, the embodiments further comprise the step ofutilizing a topology map prior to the step of introducing the newstorage-and-computing element into the distributed storage system.

Optional steps 1098, 1100, 1102 further illustrate creating the topologymap, which may comprise: a major amount of the storage-and-computingelements executing Traceroutes to at least one predefined router IPaddress (1098), and reporting (1100), to a predefined server, about therouters found on the path to the predefined router IP address; and thepredefined server locating intersections between the reported paths andaccording to that deriving the network topology (1102).

Optionally, the optimization criterion for assigning the storage elementtype to the new storage-and-computing element is utilizing a topologymap for minimizing the aggregated hop count of the retrievingstorage-and-computing elements.

For example, a cluster of 100,000 storage-and-computing elements with1000 storage element types has an average of 100 storage-and-computingelements per type. The physical addresses of the 100storage-and-computing elements associated with each type are sorted bythe number of hops (referred to as the hop count) from the retrievingstorage-and-computing element. The storage-and-computing element havingthe minimal hop count will be accessed.

Optionally, the optimization criterion for assigning the storage elementtype to the new storage-and-computing element is balancing the localstorage-and-computing elements per type.

Optionally, the embodiments further comprise the steps of: determiningat least two sub groups of all participating storage-and-computingelements; and assigning the new storage-and-computing element to one ofthe sub groups so as to balance the storage-and-computing elements pertype assigned to that sub group. Optionally, each sub group includes allparticipating storage-and-computing elements connected to the same ISProuter.

Optionally, the optimization criterion for assigning the storage elementtype to the new storage-and-computing element is minimizing transit feesbetween ISP operators by matching each storage-and-computing element toan ISP's domain prior to adding the new storage-and-computing element,whereby the storage element type selected for the newstorage-and-computing element minimizes the aggregated inter ISPstransit traffic volume. Optionally, the aggregated inter ISPs transittraffic volume is derived from a matching between eachstorage-and-computing element to an ISP domain.

Some embodiments may comprise retrieving an amount of content fragmentsthat fills a minimal streaming buffer size required for playing astreaming content, using approximately the maximum available downlinkbandwidth; wherein retrieving the content fragments comprises, for eachcontent fragment: determining the storage element type that stores thecontent fragment, using fragment-to-type association information;determining a first storage-and-computing element physical address fromwhich to retrieve the content fragment, using type-to-physical-addressassociation information; and retrieving the content fragment from thestorage-and-computing element located at the first physical address; Andwherein the content fragments are stored in a distributed storage andretrieval system comprising a plurality of storage-and-computingelements, each storage-and-computing element stores a plurality ofcontent fragments and is able to retrieve other stored content fragmentsfrom other storage-and-computing elements using Internet protocol;

Optionally, the embodiments further comprise, for each content fragmentwhose retrieving failed, determining a second storage-and-computingelement physical address from which to retrieve the content fragment,using the type-to-physical-address association information; andretrieving the content fragment from the storage-and-computing elementlocated at the second physical address. Optionally, the step ofdetermining the second storage-and-computing element physical address isexecuted according to a locality cost function.

Optionally, the embodiments further comprise the step of receiving acontent fragment identifier to jump to and retrieve content fragmentsfrom, prior to the step of retrieving the amount of content fragments,whereby the amount of content fragments are retrieved in sequentialorder from the received content fragment identifier.

Optionally, the embodiments further comprise receiving an identifier ofthe streaming content to be retrieved prior to the step of retrievingthe amount of content fragments.

Optionally, the embodiments further comprise the step of determining theminimal streaming buffer size according to the characteristics of thenetwork. Optionally, the amount of content fragments that fills theminimal streaming buffer size is calculated approximately by dividingthe minimal streaming buffer size by the size of a content fragment.

Optionally, the embodiments further comprise on going retrieving ofcontent fragments, wherein the rate of the on going retrieving isdetermined according to the streaming buffer consumption rate.

In one embodiment, a distributed storage system comprises a plurality ofstorage-and-computing elements, each storing a plurality of contentfragments, wherein a streaming content retrieval load is shared betweenthe storage-and-computing elements such that approximately the totalbandwidth of the distributed storage system can be utilized by anycombination of multiple storage-and-computing elements simultaneouslyretrieving many streaming contents or retrieving the same streamingcontent with different time shifts.

Optionally, each streaming content is associated with a differentfragment distribution information and the plurality of content fragmentsare distributed according to the fragment distribution information, andeach of the fragment distribution information features a lowautocorrelation and a low correlation with the other fragmentdistribution information.

Optionally, each of the fragment distribution information comprises atleast one of the following: hash functions, pseudo random sequences,pointers, table based distribution mechanisms, and linear distributionfunctions.

In one embodiment, a distributed storage and retrieval system comprisesa plurality of storage-and-computing elements, eachstorage-and-computing element stores a plurality of content fragmentsaccording to fragment distribution information featuring a lowautocorrelation, and is able to retrieve other stored content fragmentsfrom other storage-and-computing elements using Internet protocol; thecontent fragments are associated with a plurality of streaming contents;And a maximum number of storage-and-computing elements are able toretrieve multiple streaming contents concurrently, whereby the multiplestreaming contents may be time shifted; wherein the maximum number ofstorage-and-computing elements that are able to retrieve the multiplestreaming contents approaches the aggregated uplink throughput of allparticipating storage-and-computing elements divided by the aggregatedbitrate of the streams retrieved by the storage-and-computing elements.

In general, as the autocorrelation is lower, the distributed storagesystem may provide better performances. The low autocorrelation assuresthat the various retrieving storage-and-computing elements are referredto different storage-and-computing elements and therefore the load isspread across the storage-and-computing elements approximatelyuniformly.

Optionally, the aggregated uplink throughput of all the participatingstorage-and-computing elements is calculated dynamically according tothe current state of the distributed storage and retrieval system.

Optionally, the maximum number of storage-and-computing elements thatare able to retrieve the multiple streaming contents is almostindependent of what streaming contents are retrieved by thestorage-and-computing elements. And optionally, the maximum number ofstorage-and-computing elements that are able to retrieve the multiplestreaming contents is almost independent of the number ofstorage-and-computing elements retrieving the same streaming contents.

Referring back to the drawings, FIG. 31 illustrates embodimentscomprising the following steps: In step 1104, receiving a content to bestreamed or progressively downloaded; In step 1106, striping the contentinto small content fragments; In step 1108, distributing the contentfragments to storage-and-computing elements according to a fragmentdistribution information, and prior to any retrieval of the contentfragments from the storage-and-computing elements; In step 1110,obtaining the fragment distribution information, whereby the fragmentdistribution information is obtained by the retrievingstorage-and-computing element; And in step 1112, retrieving the contentfragments for approximately instantaneous playing of the streamingcontent by utilizing the fragment distribution information forcalculating the appropriate storage element types and transforming thestorage element type to storage-and-computing element physicaladdresses.

Optionally, each storage-and-computing element is associated with atleast one storing element type and the fragment distribution informationcomprises fragment-to-type association information andtype-to-physical-address association information.

Optionally, the embodiments further comprise the step of receiving, bythe storage-and-computing element, a request to retrieve the contentprior to the step of obtaining the fragment distribution information.

Referring back to the drawings, FIG. 32 illustrates embodimentscomprising the following steps: In step 1114, receiving a first contentto be streamed or progressively downloaded; In step 1116, striping thefirst content into small first content fragments; In step 1118,distributing the first content fragments to storage-and-computingelements according to a first fragment distribution information, andprior to any request from any storage-and-computing element to retrievethe first content;

In step 1120, obtaining the first fragment distribution informationassociated with the first content by a first group ofstorage-and-computing elements, whereby each of the firststorage-and-computing elements obtains the first fragment distributioninformation independently and uncorrelated in time with the otherstorage-and-computing elements, and wherein the first fragmentdistribution information features a low autocorrelation;

In step 1122, retrieving the first content fragments by the first groupof assembling storage-and-computing elements according to the firstfragment distribution information, wherein approximately all retrievedstreams are time shifted in relation to one another;

And in step 1124, adding additional retrieving storage-and-computingelements until the aggregated throughput of the streams consumed by allthe storage-and-computing elements approaches the aggregated uplinkthroughput of all participating storage-and-computing elements.

Optionally, multiple fragment distribution information which describemultiple redundant distributions are used per single content.

Optionally, the embodiments further comprise the steps of: receiving asecond content to be streamed or progressively downloaded; striping thesecond content into small second content fragments; distributing thesecond content fragments to storage-and-computing elements according toa second fragment distribution information, and prior to any requestfrom any storage-and-computing element to retrieve the second content;obtaining the second fragment distribution information associated withthe second content by a second group of storage-and-computing elements,whereby each of the second group of storage-and-computing elementsobtains the second fragment distribution information independently anduncorrelated in time with the other storage-and-computing elements, andwherein the second fragment distribution information features a lowautocorrelation; and retrieving the second content fragments by thesecond group of assembling storage-and-computing elements according tothe second fragment distribution information, wherein approximately allretrieved streams are time shifted in relation to one another.

Optionally, the first and the second fragment distribution informationare the same, and/or have approximately zero correlation, and/or featurelow autocorrelation and low correlation, and/or are distributedapproximately homogeneously between the storage-and-computing elements,and/or are selected from the group of: hash functions, pseudo randomsequences, pointers, table based distribution mechanisms, and lineardistribution functions.

Referring back to the drawings, FIG. 33 illustrates embodimentscomprising the following steps: In step 1126, receiving at least twocontents to be streamed or progressively downloaded; In step 1128,striping the contents into small content fragments;

In step 1130, distributing the content fragments tostorage-and-computing elements according to their corresponding fragmentdistribution information, and prior to any request from anystorage-and-computing element to retrieve one or more of the contents;and wherein the fragment distribution information features lowautocorrelation, and low correlation with other fragment distributioninformation used by the distributed storage system;

In step 1132, obtaining the fragment distribution information by aplurality of assembling storage-and-computing elements, whereby eachstorage-and-computing element obtains the fragment distributioninformation independently and uncorrelated in time with the otherstorage-and-computing elements;

In step 1134, retrieving the fragments according to the fragmentdistribution information by a plurality of assemblingstorage-and-computing elements, wherein some of the retrieved streamsare of the same content and are time shifted in relation to one another,and some of the streams are of different contents;

And in step 1136, adding additional retrieving storage-and-computingelements, until the aggregated throughput of the streams consumed by allthe storage-and-computing elements approaches the aggregated uplinkthroughput of all participating storage-and-computing elements,regardless of the mixture of the selected contents and their timeshifts.

In one embodiment, the correlations between the different fragmentdistribution information related to different contents are low,regardless of the time shifts between the different contents. As aresult, a large amount of contents may be retrieved, wherein any contentmay feature almost any required time shifts, and still the uplinkbandwidth is highly utilized.

In one embodiment, an interactive content stored in and retrieved by adistributed storage and retrieval system, comprises:

(i) a plurality of content sections; each content section comprising aplurality of content fragments; whereby the content sections are, atleast partially, operated by a user. For example, the user may selectthe order of playing the content sections and/or interact with theinteractive content and by that influence the order of the suppliedcontent sections.

(ii) instructions for combining the content sections. Optionally, theinstructions for combining the content sections depend on previousselections, previous selections of a user's sub-group, previousselections of users that are physically close to the receiving user.

For example, a plurality of users living in a certain neighborhood maywant to be presented with the same selections of an interactive movieand/or view an interactive content in the same order or in aspecifically different order from their neighbors or a group in whichthey take part. The user's physical location may be derived from anyappropriate means, such as, but not limited to, the network topology,identifiable networks, prior data, and available data.

Optionally, the instructions for combining the content sections dependon the status of the distributed storage and retrieval system.

For example, if a specific content section is not available in thedistributed storage and retrieval system, the specific content sectionwill not be introduced to the user. A content section may also not beavailable because of network congestion reasons.

Optionally, the instructions for combining the content sections areassociated with advertisement content sections. For example, a user maybe provided with an interactive content section only after watching anadvertisement.

(iii) instructions for distributing the content fragments between aplurality of storage-and-computing elements.

Optionally, the distributed storage and retrieval system comprises aplurality of storage-and-computing elements, each storage-and-computingelement stores a plurality of pushed content fragments and is able toretrieve other pushed content fragments from at least five otherstorage-and-computing elements using Internet protocol;

Optionally, the interactive content further comprises instructions forretrieving required content sections from the plurality ofstorage-and-computing elements.

In one embodiment of the invention, mega high consumption of a pluralityof streaming contents is supplied by the distributed storage andretrieval system having hundreds of thousands of storage-and-computingelements. The following is an example of an event that will require sucha mega high consumption. It is expected that in the year 2016 the nextgeneration of humanity will be created by 10,000 people that willcoherently focus their cosmic energy to form a double sided energyfunnel. An energetic body will be created at the waist of the doublesided energy funnel and a soul, equivalent to 10,000 human souls, willbe poured into the energetic body from the infinite universal soulreservoir. The next generation entity will have an energetic body andwill therefore be able to move energy routes from one place to anotherand create things from cosmic energy similarly to the way a human havinga physical body is able to create things from physical materials.

Although the embodiments of the present invention have been described inconsiderable detail with reference to certain embodiments thereof, otherembodiments are possible. Therefore, the spirit and scope of theappended claims should not be limited to the description of theembodiments contained herein.

It is appreciated that certain features of the embodiments, which are,for clarity, described in the context of separate embodiments, may alsobe provided in various combinations in a single embodiment. Conversely,various features of the embodiments, which are, for brevity, describedin the context of a single embodiment, may also be provided separatelyor in any suitable sub-combination.

It is to be understood that the embodiments are not limited in theirapplications to the details of the order or sequence of steps ofoperation or implementation of the systems and methods set in thedescription, drawings, or examples.

While the methods disclosed herein have been described and shown withreference to particular steps performed in a particular order, it willbe understood that these steps may be combined, sub-divided, orreordered to form an equivalent method without departing from theteachings of the embodiments of the present invention. Accordingly,unless specifically indicated herein, the order and grouping of thesteps is not a limitation of the embodiments of the present invention.

Any citation or identification of any reference in this applicationshall not be construed as an admission that such reference is availableas prior art to the embodiments of the present invention.

While the embodiments have been described in conjunction with specificexamples thereof, it is to be understood that they have been presentedby way of example, and not limitation. Moreover, it is evident that manyalternatives, modifications and variations will be apparent to thoseskilled in the art. Accordingly, it is intended to embrace all suchalternatives, modifications and variations that fall within the spiritand scope of the appended claims and their equivalents.

Any element in a claim that does not explicitly state “means for”performing a specific function, or “step for” performing a specificfunction, is not to be interpreted as a “means” or “step” clause asspecified in 35 U.S.C. §112, ¶6.

1. A method comprising: accessing a plurality of storage-and-computing elements distributively storing one or more contents comprising a plurality of content fragments, wherein the content fragments are distributed between the storage-and-computing elements according to fragment distribution information having a low autocorrelation per stored content; retrieving fragments of one of the contents by a group of assembling storage-and-computing elements, wherein at least most of the streams of the same retrieved content are time shifted in relation to each other; and adding additional content retrieving storage-and-computing elements up to a point where the aggregated throughput of the content streams consumed by all the retrievers approximately approaches the aggregated uplink throughput of all storage-and-computing elements storing the plurality of content fragments.
 2. The method of claim 1, wherein approximately all of the retrieved content streams are of the same content.
 3. The method of claim 1, wherein the average content fragment size is between about 1 KB and 100KB.
 4. The method of claim 3, wherein each storage-and-computing element is associated with at least one storing element type; and the step of retrieving the content fragments further comprises utilizing fragment distribution information that comprises fragment-to-type association information and type-to-physical-address association information.
 5. The method of claim 3, wherein the storage-and-computing elements distributively storing two or more contents, and the fragment distribution information related to different contents feature low correlation.
 6. The method of claim 5, wherein the step of retrieving the content fragments is performed such as to reduce at least one of the following: operational cost, setup cost, or transit fees between ISP operators
 7. The method of claim 5, wherein the step of retrieving the content fragments is performed such as to reduce network congestion or network congestion at the network aggregation levels.
 8. The method of claim 3, wherein the content delivery method is streaming or progressive download.
 9. The method of claim 1, further comprising using multiple distribution information, that describe multiple redundant distributions, per single content.
 10. A method comprising: accessing a plurality of storage-and-computing elements distributively storing a plurality of content fragments belonging to ‘N’ contents, wherein at least most of the ‘N’ contents are associated with different retrieving functions and the retrieving functions have low correlations; retrieving the content fragments by assembling storage-and-computing elements, wherein at least most of the assembling storage-and-computing elements assemble different contents; and adding assembling storage-and-computing elements up to a point where the aggregated consumption rate of the contents consumed by the assembling storage-and-computing elements approaches the aggregated uplink throughput of all participating storage-and-computing elements.
 11. The method of claim 10, wherein the content fragments are distributed approximately homogeneously between the storage-and-computing elements.
 12. The method of claim 11, wherein the average size of a content fragment is about equal to the size of the minimum payload that is efficiently transmitted between the storage-and-computing elements.
 13. The method of claim 11, wherein multiple retrieving functions that describe multiple redundant distributions are used per single content.
 14. The method of claim 10, wherein each storage-and-computing element is associated with at least one storing element type; and the step of retrieving the content fragments further comprises utilizing retrieving functions comprising fragment-to-type association information and type-to-physical-address association information.
 15. The method of claim 10, wherein each assembling storage-and-computing element assembles a different content.
 16. A method comprising: distributing content fragments belonging to at least two contents to storage-and-computing elements, according to corresponding fragment distribution information, prior to receiving a retrieval request, wherein each content is associated with a different fragment distribution information having a low autocorrelation and a low correlation with other fragment distribution information; obtaining the fragment distribution information by a plurality of assembling storage-and-computing elements; retrieving the content fragments, utilizing the fragment distribution information, by a plurality of assembling storage-and-computing elements; and adding additional retrieving storage-and-computing elements, until the aggregated throughput of the streams consumed by the retrieving storage-and-computing elements approximately approaches the aggregated uplink throughput of all participating storage-and-computing elements, almost regardless of the mixture of the selected contents and their time shifts.
 17. The method of claim 16, further comprising the step of striping the at least two contents into small content fragments before the step of distributing the content fragments.
 18. The method of claim 16, wherein each storage-and-computing element may obtain the fragment distribution information independently and uncorrelated in time with the other storage-and-computing elements.
 19. The method of claim 16, wherein the step of retrieving the content fragments comprises retrieving a plurality of time shifted streams of the same content, and a plurality of streams of different contents.
 20. The method of claim 16, wherein there are between about 50 and 1,000,000 storage-and-computing elements, the average size of a content fragment is between about 1 KB and 100 KB, and the content fragments are distributed approximately homogeneously between the storage-and-computing elements.
 21. The method of claim 16, further comprising using multiple fragment distribution information, that describe multiple redundant distributions, per single content.
 22. The method of claim 16, wherein selecting the storage-and-computing elements from which to retrieve the content fragments of the selected contents is performed according to congestion criteria or on a pseudo random basis.
 23. The method of claim 16, further comprising the step of receiving at least two contents to be streamed or progressively downloaded before the step of striping at least two contents into small content fragments. 